zeev,andi

    i have a problem with the oci-extension - it makes heaviy
    usage of ref-counting and creates dependices between resouces
    using refcounts. so i depend on a defined shutdown order and
    i also depend on the complete symbol-table to be destroyed
    before zend_destroy_rsrc_list is called as zend_destroy_rsrc_list 
    won't work with my dependicies. 

    i have created a small testcase that shows my problem without
    using the oci extension: 

    the problem is that if a function calles exit the argumets
    for that function are _not_ destroyed in the shutdown
    mechanism of zend -


<?
function any($fh)
{ 
//      exit(); // exit in a function is noo good...
}

$fp = fopen("/tmp/1","r");
any($fp);
?>

    if i set a breakpoint in _file_fopen_dtor (whic is the dtor
    for all fopen calls) i get these call frames

    _not_ calling exit in any($fh);

#0  _file_fopen_dtor (rsrc=0x8420554) at /home/thies/devel/php4/ext/standard/file.c:149
#1  0x08190cbb in list_entry_destructor (ptr=0x8420554) at 
../../php4/Zend/zend_list.c:179
#2  0x0818e65d in zend_hash_del_key_or_index (ht=0x83ae410, arKey=0x0, nKeyLength=0, 
h=1, flag=1)
    at ../../php4/Zend/zend_hash.c:543
#3  0x08190a25 in zend_list_delete (id=1) at ../../php4/Zend/zend_list.c:57
#4  0x081a5d70 in _zval_dtor (zvalue=0x8420484, __zend_filename=0x830aa40 
"../../php4/Zend/zend_execute_API.c", 
    __zend_lineno=260) at ../../php4/Zend/zend_variables.c:80
#5  0x08193742 in _zval_ptr_dtor (zval_ptr=0x84205a0, 
    __zend_filename=0x8316ce0 "../../php4/Zend/zend_variables.c", __zend_lineno=169)
    at ../../php4/Zend/zend_execute_API.c:260
#6  0x081a5fcb in _zval_ptr_dtor_wrapper (zval_ptr=0x84205a0) at 
../../php4/Zend/zend_variables.c:169
#7  0x0818e789 in zend_hash_destroy (ht=0x83ae2ec) at ../../php4/Zend/zend_hash.c:572
#8  0x081934f2 in shutdown_executor () at ../../php4/Zend/zend_execute_API.c:164
#9  0x08195a70 in zend_deactivate () at ../../php4/Zend/zend.c:538
#10 0x08089af9 in php_request_shutdown (dummy=0x0) at 
/home/thies/devel/php4/main/main.c:692
#11 0x08085bd3 in main (argc=2, argv=0xbffff7a4) at 
/home/thies/devel/php4/sapi/cgi/cgi_main.c:790
#12 0x409e3450 in __libc_start_main () from /lib/libc.so.6

    as you can see $fp is freed thru the call to
    zend_hash_destroy(&EG(symbol_table)); in shutdown_executor.


    but not so if i'm _calling_  exit in any($fh);

#0  _file_fopen_dtor (rsrc=0x84205cc) at /home/thies/devel/php4/ext/standard/file.c:149
#1  0x08190cbb in list_entry_destructor (ptr=0x84205cc) at 
../../php4/Zend/zend_list.c:179
#2  0x0818ea00 in zend_hash_apply_deleter (ht=0x83ae410, p=0x8420574) at 
../../php4/Zend/zend_hash.c:627
#3  0x0818ebae in zend_hash_graceful_destroy (ht=0x83ae410) at 
../../php4/Zend/zend_hash.c:678
#4  0x08190e13 in zend_destroy_rsrc_list () at ../../php4/Zend/zend_list.c:234
#5  0x08193591 in shutdown_executor () at ../../php4/Zend/zend_execute_API.c:178
#6  0x08195a70 in zend_deactivate () at ../../php4/Zend/zend.c:538
#7  0x08089af9 in php_request_shutdown (dummy=0x0) at 
/home/thies/devel/php4/main/main.c:692
#8  0x08085bd3 in main (argc=2, argv=0xbffff7a4) at 
/home/thies/devel/php4/sapi/cgi/cgi_main.c:790
#9  0x409e3450 in __libc_start_main () from /lib/libc.so.6
(gdb) r

    as you see the resource is cleaned thru
    zend_destroy_rsrc_list which won't work with dependicies.

    again the problem is that the arguments on the stack do _not_
    get cleared if a function calls exit(). 

    what can be done?

    tc

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to