Can you please not send uuencoded stuff but just attach the files as plain text?
Sorry Derick, I didn't mean to. :-( The patch is attached as plain text now.
Cristiano Duarte
? php-src/ZendEngine1
Index: php-src/Zend/zend_alloc.c
===================================================================
RCS file: /repository/ZendEngine2/zend_alloc.c,v
retrieving revision 1.129
diff -u -r1.129 zend_alloc.c
--- php-src/Zend/zend_alloc.c 17 Oct 2003 02:29:06 -0000 1.129
+++ php-src/Zend/zend_alloc.c 26 Oct 2003 16:57:39 -0000
@@ -477,6 +477,10 @@
zend_uint grand_total_leaks=0;
#endif
+ if (zend_internal_nOfHashTables() > 0) {
+ zend_gc_destroy_internal_hashtables();
+ }
+
#if defined(ZEND_MM) && !ZEND_DEBUG
if (clean_cache) {
zend_mm_shutdown(&AG(mm_heap));
Index: php-src/Zend/zend_hash.c
===================================================================
RCS file: /repository/ZendEngine2/zend_hash.c,v
retrieving revision 1.113
diff -u -r1.113 zend_hash.c
--- php-src/Zend/zend_hash.c 29 Aug 2003 07:34:37 -0000 1.113
+++ php-src/Zend/zend_hash.c 26 Oct 2003 16:57:40 -0000
@@ -1313,6 +1313,48 @@
}
#endif
+struct _internal_hashtables {
+ HashTable **list;
+ int nOfHashTables;
+};
+struct _internal_hashtables *internal_hashtables = NULL;
+
+int zend_internal_nOfHashTables() {
+ return (internal_hashtables == NULL) ? 0 : internal_hashtables->nOfHashTables;
+}
+
+void zend_gc_add_internal_hashtable(HashTable *ht TSRMLS_DC) {
+ HashTable **ptr;
+ if (internal_hashtables == NULL) {
+ internal_hashtables = malloc(sizeof(struct _internal_hashtables));
+ internal_hashtables->nOfHashTables = 0;
+ internal_hashtables->list = NULL;
+ }
+ internal_hashtables->list = realloc(internal_hashtables->list,
sizeof(HashTable*) * (internal_hashtables->nOfHashTables + 1));
+ ptr = internal_hashtables->list;
+ ptr += internal_hashtables->nOfHashTables;
+ *ptr = ht;
+ ++(internal_hashtables->nOfHashTables);
+}
+
+void zend_gc_destroy_internal_hashtables() {
+ HashTable **ptr;
+ if (internal_hashtables != NULL) {
+ ptr = internal_hashtables->list;
+ if (ptr != NULL) {
+ int i;
+ for (i = 0; i < internal_hashtables->nOfHashTables; ++i) {
+ zend_hash_destroy(*ptr);
+ ++ptr;
+ }
+ free(internal_hashtables->list);
+ internal_hashtables->list = NULL;
+ free(internal_hashtables);
+ internal_hashtables = NULL;
+ }
+ }
+}
+
/*
* Local variables:
* tab-width: 4
Index: php-src/Zend/zend_hash.h
===================================================================
RCS file: /repository/ZendEngine2/zend_hash.h,v
retrieving revision 1.75
diff -u -r1.75 zend_hash.h
--- php-src/Zend/zend_hash.h 25 Sep 2003 15:38:35 -0000 1.75
+++ php-src/Zend/zend_hash.h 26 Oct 2003 16:57:40 -0000
@@ -350,6 +350,14 @@
return zend_hash_exists(ht, arKey, nKeyLength);
}
+#define ZEND_INIT_INTERNAL_SYMTABLE(ht) \
+ ZEND_INIT_SYMTABLE(ht); \
+ zend_gc_add_internal_hashtable(ht TSRMLS_CC);
+
+int zend_internal_nOfHashTables();
+void zend_gc_add_internal_hashtable(HashTable *ht TSRMLS_DC);
+void zend_gc_destroy_internal_hashtables();
+
#endif /* ZEND_HASH_H */
/*-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
