diff options
-rw-r--r-- | TSRM/TSRM.c | 27 | ||||
-rw-r--r-- | TSRM/TSRM.h | 16 |
2 files changed, 41 insertions, 2 deletions
diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c index 6ffc2e478d..50928562e4 100644 --- a/TSRM/TSRM.c +++ b/TSRM/TSRM.c @@ -1,3 +1,19 @@ +/* + +----------------------------------------------------------------------+ + | Thread Safe Resource Manager | + +----------------------------------------------------------------------+ + | Copyright (c) 1998, 1999 Zeev Suraski | + +----------------------------------------------------------------------+ + | This source file is subject to the Zend license, that is bundled | + | with this package in the file LICENSE. If you did not receive a | + | copy of the Zend license, please mail us at zend@zend.com so we can | + | send you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Zeev Suraski <zeev@zend.com> | + +----------------------------------------------------------------------+ +*/ + + #include "TSRM.h" #include <stdio.h> @@ -129,6 +145,9 @@ TSRM_FUNC ts_rsrc_id ts_allocate_id(size_t size, void (*ctor)(void *resource), v p->storage = realloc(p->storage, sizeof(void *)*id_count); for (j=p->count; j<id_count; j++) { p->storage[j] = (void *) malloc(resource_types_table[j].size); + if (resource_types_table[j].ctor) { + resource_types_table[j].ctor(p->storage[j]); + } } p->count = id_count; } @@ -153,7 +172,9 @@ static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_ (*thread_resources_ptr)->next = NULL; for (i=0; i<id_count; i++) { (*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size); - resource_types_table[i].ctor((*thread_resources_ptr)->storage[i]); + if (resource_types_table[i].ctor) { + resource_types_table[i].ctor((*thread_resources_ptr)->storage[i]); + } } } @@ -216,7 +237,9 @@ void ts_free_thread() int i; for (i=0; i<thread_resources->count; i++) { - resource_types_table[i].dtor(thread_resources->storage[i]); + if (resource_types_table[i].dtor) { + resource_types_table[i].dtor(thread_resources->storage[i]); + } free(thread_resources->storage[i]); } free(thread_resources->storage); diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h index 3591dc2b04..aec84fe7e6 100644 --- a/TSRM/TSRM.h +++ b/TSRM/TSRM.h @@ -1,3 +1,19 @@ +/* + +----------------------------------------------------------------------+ + | Thread Safe Resource Manager | + +----------------------------------------------------------------------+ + | Copyright (c) 1998, 1999 Zeev Suraski | + +----------------------------------------------------------------------+ + | This source file is subject to the Zend license, that is bundled | + | with this package in the file LICENSE. If you did not receive a | + | copy of the Zend license, please mail us at zend@zend.com so we can | + | send you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Zeev Suraski <zeev@zend.com> | + +----------------------------------------------------------------------+ +*/ + + #ifndef _TSRM_H #define _TSRM_H |