]> granicus.if.org Git - php/commitdiff
- Fix problem with scope's not changing correctly during method calls.
authorAndi Gutmans <andi@php.net>
Wed, 26 Jun 2002 11:07:35 +0000 (11:07 +0000)
committerAndi Gutmans <andi@php.net>
Wed, 26 Jun 2002 11:07:35 +0000 (11:07 +0000)
- Reapply a tiny optimization to the allocator so that in non-debug mode
- we clean memory without detecting leaks.

Zend/zend_alloc.c
Zend/zend_execute.c

index def9fa135c3bf520f05435cbbd839f707c3b28f4..c93317e75b51337715fde3840cb46d87eae7b0cf 100644 (file)
@@ -441,18 +441,32 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC)
        int had_leaks = 0;
 #endif
 
+#if defined(ZEND_MM) && !ZEND_DEBUG
+       if (clean_cache) {
+               zend_mm_shutdown(&AG(mm_heap));
+               return;
+       }
+#elif defined(ZEND_WIN32) && !ZEND_DEBUG
+       if (clean_cache && AG(memory_heap)) {
+               HeapDestroy(AG(memory_heap));
+               return;
+       }
+#endif
+
 #if ZEND_ENABLE_FAST_CACHE
-       zend_fast_cache_list_entry *fast_cache_list_entry, *next_fast_cache_list_entry;
-       unsigned int fci;
-
-       for (fci=0; fci<MAX_FAST_CACHE_TYPES; fci++) {
-               fast_cache_list_entry = AG(fast_cache_list_head)[fci];
-               while (fast_cache_list_entry) {
-                       next_fast_cache_list_entry = fast_cache_list_entry->next;
-                       efree(fast_cache_list_entry);
-                       fast_cache_list_entry = next_fast_cache_list_entry;
+       {
+               zend_fast_cache_list_entry *fast_cache_list_entry, *next_fast_cache_list_entry;
+               unsigned int fci;
+
+               for (fci=0; fci<MAX_FAST_CACHE_TYPES; fci++) {
+                       fast_cache_list_entry = AG(fast_cache_list_head)[fci];
+                       while (fast_cache_list_entry) {
+                               next_fast_cache_list_entry = fast_cache_list_entry->next;
+                               efree(fast_cache_list_entry);
+                               fast_cache_list_entry = next_fast_cache_list_entry;
+                       }
+                       AG(fast_cache_list_head)[fci] = NULL;
                }
-               AG(fast_cache_list_head)[fci] = NULL;
        }
 #endif /* ZEND_ENABLE_FAST_CACHE */
 
@@ -564,13 +578,15 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC)
 
 #endif
 
-#ifdef ZEND_MM
+#if defined(ZEND_MM) && ZEND_DEBUG
        if (clean_cache) {
                zend_mm_shutdown(&AG(mm_heap));
+               return;
        }
-#elif defined(ZEND_WIN32)
+#elif defined(ZEND_WIN32) && ZEND_DEBUG
        if (clean_cache && AG(memory_heap)) {
                HeapDestroy(AG(memory_heap));
+               return;
        }
 #endif
 }
index 858766817be9b2b9e0899ccfcb22e06f3fd91ebd..581de6f3e88a60808a170bdcc6982bd0651da9a7 100644 (file)
@@ -1939,7 +1939,7 @@ binary_assign_op_addr_obj:
                                        }
 
                                        if(EX(fbc)->type == ZEND_USER_FUNCTION) {
-                                               EX(calling_scope) = Z_OBJCE_P(EX(object));
+                                               EX(calling_scope) = EX(fbc)->common.scope;
                                        } else {
                                                EX(calling_scope) = NULL;
                                        }