I don't understand why this would have to be in RSHUTDOWN.  We are talking
about an Apache restart here so MSHUTDOWN should be sufficient.

-Rasmus

On Fri, 23 Apr 2004, Andi Gutmans wrote:

> I think changing back to malloc/free on RSHUTDOWN is a better solution.
> After all, we use our memory manager to prevent memory leaks and I think
> this is one of PHP's most important features. I don't trust third party
> extensions :)
>
> Andi
>
> At 11:02 AM 4/22/2004 +0100, Joe Orton wrote:
> >This fixes #121454: the pcre extension should not change the global
> >allocation callbacks for pcre.
> >
> >PCRE is used inside httpd and may be used by modules other than PHP too;
> >having these modules use PHP allocation functions doesn't seem at all
> >sensible, and could mess up the memory limit accounting presumably.
> >
> >The cause of #121454 is that during a restart, libphp4.so is unloaded
> >from memory, but the global variable pcre_malloc is left pointing at
> >php_pcre_malloc; so when httpd uses pcre, it all goes boom.
> >
> >Alternative fix might be to use a shutdown function in the extension
> >which does "pcre_malloc = malloc; pcre_free = free;" but I think it's
> >wiser just to stay well clear of the issue.
> >
> >--- php-4.3.6/ext/pcre/php_pcre.c.pcrealloc
> >+++ php-4.3.6/ext/pcre/php_pcre.c
> >@@ -47,20 +47,6 @@
> >
> >  ZEND_DECLARE_MODULE_GLOBALS(pcre)
> >
> >-
> >-static void *php_pcre_malloc(size_t size)
> >-{
> >-       return pemalloc(size, 1);
> >-}
> >-
> >-
> >-static void php_pcre_free(void *ptr)
> >-{
> >-       if (ptr)
> >-       pefree(ptr, 1);
> >-}
> >-
> >-
> >  static void php_free_pcre_cache(void *data)
> >  {
> >         pcre_cache_entry *pce = (pcre_cache_entry *) data;
> >@@ -107,14 +93,6 @@
> >         REGISTER_LONG_CONSTANT("PREG_SPLIT_OFFSET_CAPTURE",
> > PREG_SPLIT_OFFSET_CAPTURE, CONST_CS | CONST_PERSISTENT);
> >         REGISTER_LONG_CONSTANT("PREG_GREP_INVERT", PREG_GREP_INVERT,
> > CONST_CS | CONST_PERSISTENT);
> >
> >-       pcre_malloc = php_pcre_malloc;
> >-       pcre_free = php_pcre_free;
> >-
> >-#ifdef NO_RECURSE
> >-       pcre_stack_malloc = php_pcre_malloc;
> >-       pcre_stack_free = php_pcre_free;
> >-#endif
> >-
> >         return SUCCESS;
> >  }
> >  /* }}} */
> >@@ -548,7 +526,7 @@
> >                                         }
> >                                 }
> >
> >-                               php_pcre_free((void *) stringlist);
> >+                               pcre_free((void *) stringlist);
> >                         }
> >                 }
> >                 else { /* Failed to match */
> >
> >--
> >PHP Internals - PHP Runtime Development Mailing List
> >To unsubscribe, visit: http://www.php.net/unsub.php
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to