]> granicus.if.org Git - php/commitdiff
Fix memory_limit
authorZeev Suraski <zeev@php.net>
Sat, 19 Aug 2000 16:35:02 +0000 (16:35 +0000)
committerZeev Suraski <zeev@php.net>
Sat, 19 Aug 2000 16:35:02 +0000 (16:35 +0000)
Zend/zend_alloc.c

index b5025414a794f0d047317a3cbe95347b029a5241..f33aee46d8bc91f25d0b9edfd6d593f4b4b6bee0 100644 (file)
@@ -57,11 +57,18 @@ ZEND_API zend_alloc_globals alloc_globals;
 
 #define _CHECK_MEMORY_LIMIT(s, rs, file, lineno) { AG(allocated_memory) += rs;\
                                                                if (AG(memory_limit)<AG(allocated_memory)) {\
-                                                                       if (!file) { \
-                                                                               zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", AG(memory_limit),s); \
-                                                                       } else { \
-                                                                               zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", AG(memory_limit), file, lineno, s); \
-                                                                       } \
+                                                                       if ((AG(memory_limit)+1048576)<AG(allocated_memory)) { \
+                                                                               /* failed to handle this gracefully, exit() */ \
+                                                                               exit(1);        \
+                                                                       }       \
+                                                                       if (!AG(memory_exhausted)) {    \
+                                                                               if (!file) { \
+                                                                                       zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", AG(memory_limit),s); \
+                                                                               } else { \
+                                                                                       zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", AG(memory_limit), file, lineno, s); \
+                                                                               } \
+                                                                               AG(memory_exhausted)=1; \
+                                                                       }       \
                                                                } \
                                                        }
 # endif
@@ -435,6 +442,7 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
                                }
                        }
 #endif
+                       AG(allocated_memory) -= t->size;
                        p = t->pNext;
                        REMOVE_POINTER_FROM_LIST(t);
                        free(t);
@@ -451,6 +459,7 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
                        }
                }
        }
+       AG(memory_exhausted)=0;
 
 #if (ZEND_DEBUG)
        do {