persistent memory management

php.internals

Alexey Zakhlestin

19 years ago
Hi. I am trying to make my first php extension :) I am sorry, if the question would be too newbiesh, but I just couldn't find a more correct place to ask here is the code: http://loccache.googlecode.com/svn/trunk/loccache.c I am trying to do the following: at the minit-phase I am allocating a persistent HashTable extension has 4 funcitons: * loc_set($namespace, $varname, $value); // stores $value * loc_get($namespace, $varname) // returns $value from storage * loc_isset($namespace, $varname) // returns bool * loc_unset($namespace, $varname) // removes varname from storage during loc_set, I chech if there is "$namespace" item in my persistent hashtable, and if there isn't, I create it as a child hashtable $varname is a key in that second HashTable and $value is the value something like: $big_persistent_hash = array( $namespace => array( $varname => $value ) ); extension build and even tends to work... kinda.. unfortunately, persistent values are not too persistent in my case, and i keep getting memory errors. I would be grateful for any help. the source code is not too big :)

Matt W

19 years ago
Hi Alexey, Not sure what the exact problem is, or if this is related, but in your loc_set() function's zend_hash_add() calls, you have sizeof(HashTable) and sizeof(zval). Shouldn't both of those be sizeof(HashTable *) ? :-) Matt ----- Original Message ----- From: "Alexey Zakhlestin" Sent: Saturday, December 02, 2006 Hi. I am trying to make my first php extension :) I am sorry, if the question would be too newbiesh, but I just couldn't find a more correct place to ask here is the code: http://loccache.googlecode.com/svn/trunk/loccache.c I am trying to do the following: at the minit-phase I am allocating a persistent HashTable extension has 4 funcitons: * loc_set($namespace, $varname, $value); // stores $value * loc_get($namespace, $varname) // returns $value from storage * loc_isset($namespace, $varname) // returns bool * loc_unset($namespace, $varname) // removes varname from storage during loc_set, I chech if there is "$namespace" item in my persistent hashtable, and if there isn't, I create it as a child hashtable $varname is a key in that second HashTable and $value is the value something like: $big_persistent_hash = array( $namespace => array( $varname => $value ) ); extension build and even tends to work... kinda.. unfortunately, persistent values are not too persistent in my case, and i keep getting memory errors. I would be grateful for any help. the source code is not too big :)

Alexey Zakhlestin

19 years ago
On 12/3/06, Matt Wilmas <php_lists@realplain.com> wrote:
> Hi Alexey, > > Not sure what the exact problem is, or if this is related, but in your > loc_set() function's zend_hash_add() calls, you have sizeof(HashTable) and > sizeof(zval). Shouldn't both of those be sizeof(HashTable *) ? :-)
(HashTable *) and (zval *), actually thanks
-- Alexey Zakhlestin http://blog.milkfarmsoft.com/

Matt W

19 years ago
Hi Alexey, ----- Original Message ----- From: "Alexey Zakhlestin" Sent: Sunday, December 03, 2006
> On 12/3/06, Matt Wilmas <php_lists@realplain.com> wrote: > > Hi Alexey, > > > > Not sure what the exact problem is, or if this is related, but in your > > loc_set() function's zend_hash_add() calls, you have sizeof(HashTable)
and
> > sizeof(zval). Shouldn't both of those be sizeof(HashTable *) ? :-) > > (HashTable *) and (zval *), actually > thanks
Well, your variables being added, g_ht and ns_ht, are both HashTable * , so... ;-)
> Alexey Zakhlestin > http://blog.milkfarmsoft.com/
Matt

Alexey Zakhlestin

19 years ago
first zend_hash_add adds ns_ht, so it is (HashTable *) second zend_hash_add adds p_val, so it is (zval *) am I missing something obvious? On 12/3/06, Matt Wilmas <php_lists@realplain.com> wrote:
> Hi Alexey, > > ----- Original Message ----- > From: "Alexey Zakhlestin" > Sent: Sunday, December 03, 2006 > > > On 12/3/06, Matt Wilmas <php_lists@realplain.com> wrote: > > > Hi Alexey, > > > > > > Not sure what the exact problem is, or if this is related, but in your > > > loc_set() function's zend_hash_add() calls, you have sizeof(HashTable) > and > > > sizeof(zval). Shouldn't both of those be sizeof(HashTable *) ? :-) > > > > (HashTable *) and (zval *), actually > > thanks > > Well, your variables being added, g_ht and ns_ht, are both HashTable * , > so... ;-) > > > Alexey Zakhlestin > > http://blog.milkfarmsoft.com/ > > Matt > >
-- Alexey Zakhlestin http://blog.milkfarmsoft.com/

Matt W

19 years ago
Hi Alexey, Whoops! Ugh, I was looking at the first param of zend_hash_add(). :-O You're correct then, sorry! :-/ Matt ----- Original Message ----- From: "Alexey Zakhlestin" Sent: Sunday, December 03, 2006