]> granicus.if.org Git - php/commitdiff
- More work on ts_free_id() but still keep it out
authorMarcus Boerger <helly@php.net>
Wed, 12 May 2004 22:28:28 +0000 (22:28 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 12 May 2004 22:28:28 +0000 (22:28 +0000)
TSRM/TSRM.c

index 1ae5345c1f69a51a1ca52c50a8fd6537bf3291c8..3369c5e69bad8c2604db1728e10418dfa6b9469f 100644 (file)
@@ -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; j<p->count; 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; i<tsrm_tls_table_size; i++) {
@@ -424,7 +430,7 @@ void ts_free_thread(void)
 /* deallocates all occurrences of a given id */
 void ts_free_id(ts_rsrc_id id)
 {
-#if MBO_0
+#ifdef MBO_0
        int i;
        int j = TSRM_UNSHUFFLE_RSRC_ID(id);
 
@@ -434,7 +440,7 @@ void ts_free_id(ts_rsrc_id id)
 
        if (tsrm_tls_table) {
                for (i=0; i<tsrm_tls_table_size; i++) {
-                       tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
+                       tsrm_tls_entry *p = tsrm_tls_table[i];
 
                        while (p) {
                                if (p->count > 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);