Do proper cleanup for tsd_state_reincarnated.

Also enable arena_bind under non-nominal state, as the cleanup will be handled
correctly now.
This commit is contained in:
Qi Wang 2017-03-29 17:00:52 -07:00 committed by Qi Wang
parent 51d3682950
commit d3cda3423c
4 changed files with 50 additions and 18 deletions

View file

@ -86,6 +86,12 @@ tsd_cleanup(void *arg) {
/* Do nothing. */
break;
case tsd_state_nominal:
case tsd_state_reincarnated:
/*
* Reincarnated means another destructor deallocated memory
* after this destructor was called. Reset state to
* tsd_state_purgatory and request another callback.
*/
#define MALLOC_TSD_cleanup_yes(n, t) \
n##_cleanup(tsd);
#define MALLOC_TSD_cleanup_no(n, t)
@ -106,15 +112,6 @@ MALLOC_TSD
* nothing, and do not request another callback.
*/
break;
case tsd_state_reincarnated:
/*
* Another destructor deallocated memory after this destructor
* was called. Reset state to tsd_state_purgatory and request
* another callback.
*/
tsd->state = tsd_state_purgatory;
tsd_set(tsd);
break;
default:
not_reached();
}