From: Marcus Boerger Date: Wed, 12 May 2004 22:28:28 +0000 (+0000) Subject: - More work on ts_free_id() but still keep it out X-Git-Tag: RELEASE_0_1~215 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=88a02ba159cab10d400727920f1ab430c3397fd2;p=php - More work on ts_free_id() but still keep it out --- diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c index 1ae5345c1f..3369c5e69b 100644 --- a/TSRM/TSRM.c +++ b/TSRM/TSRM.c @@ -34,6 +34,9 @@ typedef struct { size_t size; ts_allocate_ctor ctor; ts_allocate_dtor dtor; +#ifdef MBO_0 + int done; +#endif } tsrm_resource_type; @@ -159,8 +162,8 @@ TSRM_API void tsrm_shutdown(void) next_p = p->next; for (j=0; jcount; j++) { if (p->storage[j]) { -#if MBO_0 - if (resource_types_table && resource_types_table[j].dtor) { +#ifdef MBO_0 + if (resource_types_table && !resource_types_table[j].done && resource_types_table[j].dtor) { resource_types_table[j].dtor(p->storage[j], &p->storage); } #endif @@ -223,6 +226,9 @@ TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].size = size; resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].ctor = ctor; resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].dtor = dtor; +#ifdef MBO_0 + resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].done = 0; +#endif /* enlarge the arrays for the already active threads */ for (i=0; icount > j && p->storage[j]) { @@ -448,6 +454,7 @@ void ts_free_id(ts_rsrc_id id) } } } + resource_types_table[j].done = 1; tsrm_mutex_unlock(tsmm_mutex);