On Sat, Jan 18, 2014 at 7:47 PM, Lin Yo-An <[email protected]> wrote:
> Hello,
>
> I am trying to store a zval object into the persistent list in zend VM.
> (Using EG(persistent_list) and zend_rscd_list_entry)
>
> Which works fine if I store/fetch the zval in the same request context.
>
> But it seems that zend engine cleans up the zval object after the request,
> when the next request comes, the fetched list entry points to a freed zval
> address and it makes php segmentationfault. I guess zval is allocated by
> emalloc, so I cant keep it cross requests?
For persistent alloc, you should use pemalloc() , which is just a
wrapper leading to libc's malloc.
If you use emalloc() , the Zend Memory Manager will free the storage
at the end of the request, thus leading to use-after-free crash if you
reuse your pointer on a next request.
Julien