Hello Moriyoshi,

to me that sounds good.

Tuesday, July 1, 2003, 7:33:08 PM, you wrote:

MK> Hi,

MK> Perhaps I'm missing something, but I noticed the current ZE2 
MK> implementation doesn't seem to correctly handle constants registered to 
MK> internal classes. I tracked down the cause of this problem, and finally 
MK> figured out that those constants are destroyed by the ordinary 
MK> zval_ptr_dtor_wrapper() at the destruction of the constant hash after the 
MK> deactivation of the memory manager. Then I'm putting forward the following 
MK> ideas to avoid this.

MK> 1. Unify the calls of pefree() / efree() by a function pointer followed by 
MK> the actual memory block which directs to the actual free() implementation 
MK> the memory block should be freed by. Here's the example stuff I'm 
MK> referring to: 

MK> typedef struct _memblk_t {
MK>         void (*free_fn)(void *ptr);
MK>         byte blk[];
MK> } memblk_t;

MK> void efree_impl(void *ptr)
MK> {
MK>         ...
MK> }

MK> void pefree_impl(void *ptr)
MK> {
MK>         free(ptr);
MK> }

MK> void *pemalloc_impl(size_t sz)
MK> {
MK>         return malloc(sz);
MK> }

MK> void *pemalloc(size_t sz, int persistent)
MK> {
MK>         void *ptr;

MK>         if (persistent) {
MK>                 ptr = emalloc_impl(sz + sizeof(memblk_t));
MK>                 ptr->free_fn = efree_impl;
MK>         } else {
MK>                 ptr = pemalloc_impl(sz + sizeof(memblk_t));
MK>                 ptr->free_fn = pefree_impl;
MK>         }
MK>         return (void *)ptr->blk;
MK> }

MK> void efree(void *ptr)
MK> {
MK>         memblk_t *actual_head;
MK>         actual_head = (memblk_t *)((byte *)ptr - &((memblk_t *)0)->blk);
MK>         actual_head->free_fn((void *)actual_head);
MK> }


MK> 2. Add some new constructors / destructors dedicated to the persistent 
MK> zvals, like ALLOC_INIT_PERSISTENT_ZVAL(), persistent_zval_dtor(), or 
MK> persistent_zval_ptr_dtor(). I don't like this idea though.

MK> Any opinions?

MK> Moriyoshi





-- 
Best regards,
 Marcus                            mailto:[EMAIL PROTECTED]


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

Reply via email to