Re: Fwd: How to create Persistent zval?

From: Date: Sat, 18 Jan 2014 19:19:34 +0000
Subject: Re: Fwd: How to create Persistent zval?
Groups: php.internals 
Request: Send a blank email to internals+get-71249@lists.php.net to get a copy of this message
>> 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. --- Disclaimer --- I'm passing this along; Joe is having technical difficulties and asked for help sending this to the list. I provide no warranties or refunds ;) --- All zvals passed into the engine must be allocated by the mm, you cannot pemalloc anything and pass it into the engine safely. You don't want to store a persistent zval, you want to store a persistent resource entry, which should be allocated with pemalloc(size, 1) The reason for this is when cleaning up, the engine has no means by which to tell if a zval has been pemalloc or emalloc'd, zval_ptr_dtor works the same for everything. Cheers Joe

« previous php.internals (#71249) next »