Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:19935 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 35735 invoked by uid 1010); 9 Nov 2005 13:40:44 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 35720 invoked from network); 9 Nov 2005 13:40:44 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 9 Nov 2005 13:40:44 -0000 X-Host-Fingerprint: 209.68.5.16 relay02.pair.com Received: from ([209.68.5.16:1109] helo=relay02.pair.com) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id F6/CA-28724-C5CF1734 for ; Wed, 09 Nov 2005 08:40:44 -0500 Received: (qmail 93355 invoked from network); 9 Nov 2005 13:40:40 -0000 Received: from unknown (HELO ?192.168.1.26?) (unknown) by unknown with SMTP; 9 Nov 2005 13:40:40 -0000 X-pair-Authenticated: 82.50.35.230 Mime-Version: 1.0 (Apple Message framework v746.2) Content-Transfer-Encoding: 7bit Message-ID: Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed To: internals@lists.php.net Date: Wed, 9 Nov 2005 14:40:39 +0100 X-Mailer: Apple Mail (2.746.2) Subject: Correct use of zend_list_delete From: marco@vampiresoft.com (Marco Bambini) Maybe this is a question too simple for this list, but I am writing my first php extension (using php 4.4 SDK) so please, be patient... My extension (rsql) returns a custom struct to php so my code in my rsql_connect looks like: ZEND_FUNCTION(rsql_connect) { .... RETURN_RESOURCE(zend_list_insert(rsqldb, rsql_connection)); } The relevant code is: ZEND_FUNCTION(rsql_disconnect) { ... ZEND_FETCH_RESOURCE2(rsqldb, void*, theConnectionParameter, -1, kConnIDString, rsql_connection, rsql_pconnection); if (rsqldb) zend_list_delete(Z_LVAL_PP(theConnectionParameter)); if (rsqldb) myCustomFree(rsqldb); } static void rsql_realconnectionclose(zend_rsrc_list_entry *rsrc) { void *rsqldb; if (rsrc != NULL) { rsqldb = rsrc->ptr; if (rsqldb != NULL) { rsqlserver_disconnect(rsqldb, kTRUE); rsqldb = NULL; if (persistent == kTRUE) RSQL_G(num_persistent)--; } } } PHP_MINIT_FUNCTION(rsql) { rsql_connection = zend_register_list_destructors_ex (rsql_realconnectionclose, NULL, kConnIDString, module_number); } What is the issue I encounter with this code? This php code crashes: for ($i=0; $i<10; $i++){ $dbconn = rsql_connect("127.0.0.1","admin","admin"); if (is_resource($dbconn) == 0){ print "Connection to database server failed."; exit(); } rsql_disconnect($dbconn); } and also this one: for ($i=0; $i<10; $i++){ $dbconn = rsql_connect("127.0.0.1","admin","admin"); if (is_resource($dbconn) == 0){ print "Connection to database server failed."; exit(); } } What I think is that when rsql_disconnect is called explicitly or by the destructor (rsql_realconnectionclose) my custom struct isn't really deleted from the zend_list. I really appreciate any help for my issue... Thanks a lot, Marco Bambini