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

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

Reply via email to