The script Sample.php is :
<html>
<body>
<?
// error handler function
// this function NEVER RETURN (all errors are FATAL) !!
function myErrorHandler($errno,$ErrorMsg)
{    echo $ErrorMsg,'</body></html>';
    exit();  // global exit of PHP
}

//MAIN PGM:
// set to the user defined error handler
set_error_handler('myErrorHandler');
$connect_id=sybase_connect('server,'GenRe','password');
if (!$connect_id)
    echo "An error in sybase_connect !!<br>";
else
{    $res=sybase_query('select * from toto',$connect_id);
      // code never reached !
    if (!$res)
        echo "An error in sybase_query !!<br>";
    else
        echo 'No error';
}
?>
</html>
</body>

Before I display Sample.php I try a sp_who command on Sybase. The result is
:
1> sp_who
2> go
 fid    spid   status       loginame     origname     hostname   blk_spid
dbname     cmd              block_xloid
 ------ ------ ------------ ------------ ------------ ---------- --------
---------- ---------------- -----------
      0      2 sleeping     NULL         NULL                    0
master     NETWORK HANDLER            0
      0      3 sleeping     NULL         NULL                    0
master     DEADLOCK TUNE              0
      0      4 sleeping     NULL         NULL                    0
master     MIRROR HANDLER             0
      0      5 sleeping     NULL         NULL                    0
master     ASTC HANDLER               0
      0      6 sleeping     NULL         NULL                    0
master     CHECKPOINT SLEEP           0
      0      7 sleeping     NULL         NULL                    0
master     HOUSEKEEPER                0
      0     12 recv sleep   sa           sa           WinNT      0
CPC_V0     AWAITING COMMAND           0
      0     15 recv sleep   sa           sa           WinNT      0
CPC_V0     AWAITING COMMAND           0
      0     17 running      sa           sa           WinNT      0
CPC_V0     SELECT                     0

(9 rows affected)
(return status = 0)
It seems OK !
After one display of Sample.php the sp_who become :
1> sp_who
2> go
 fid    spid   status       loginame     origname     hostname   blk_spid
dbname     cmd              block_xloid
 ------ ------ ------------ ------------ ------------ ---------- --------
---------- ---------------- -----------
      0      2 sleeping     NULL         NULL                    0
master     NETWORK HANDLER            0
      0      3 sleeping     NULL         NULL                    0
master     DEADLOCK TUNE              0
      0      4 sleeping     NULL         NULL                    0
master     MIRROR HANDLER             0
      0      5 sleeping     NULL         NULL                    0
master     ASTC HANDLER               0
      0      6 sleeping     NULL         NULL                    0
master     CHECKPOINT SLEEP           0
      0      7 sleeping     NULL         NULL                    0
master     HOUSEKEEPER                0
      0     12 recv sleep   sa           sa           WinNT      0
CPC_V0     AWAITING COMMAND           0
      0     15 recv sleep   sa           sa           WinNT      0
CPC_V0     AWAITING COMMAND           0
      0     17 running      sa           sa           WinNT      0
CPC_V0     SELECT                     0
      0     19 recv sleep   GenRe        GenRe                   0
CPC_V0     AWAITING COMMAND           0

(10 rows affected)
(return status = 0)
And you can see the last user in state "recv sleep" still here, even if the
PHP script is dead.
As intended PHP have produced :
<html>
<body>
Sybase:  Server message:  toto not found. Specify owner.objectname or use
sp_help to check whether the object exists (sp_help may produce lots of
output).
 (severity 16, procedure N/A)</body></html>
It wouldn't be very harmful if PHP doesn't try, later, to use this "recv
sleep" connexion again !
If I display (refresh) Sample.php a few time, the sp_who give me :
1> sp_who
2> go
 fid    spid   status       loginame     origname     hostname   blk_spid
dbname     cmd              block_xloid
 ------ ------ ------------ ------------ ------------ ---------- --------
---------- ---------------- -----------
      0      2 sleeping     NULL         NULL                    0
master     NETWORK HANDLER            0
      0      3 sleeping     NULL         NULL                    0
master     DEADLOCK TUNE              0
      0      4 sleeping     NULL         NULL                    0
master     MIRROR HANDLER             0
      0      5 sleeping     NULL         NULL                    0
master     ASTC HANDLER               0
      0      6 sleeping     NULL         NULL                    0
master     CHECKPOINT SLEEP           0
      0      7 sleeping     NULL         NULL                    0
master     HOUSEKEEPER                0
      0     11 recv sleep   GenRe        GenRe                   0
CPC_V0     AWAITING COMMAND           0
      0     12 recv sleep   sa           sa           WinNT      0
CPC_V0     AWAITING COMMAND           0
      0     13 recv sleep   GenRe        GenRe                   0
CPC_V0     AWAITING COMMAND           0
      0     14 recv sleep   GenRe        GenRe                   0
CPC_V0     AWAITING COMMAND           0
      0     15 recv sleep   sa           sa           WinNT      0
CPC_V0     AWAITING COMMAND           0
      0     16 recv sleep   GenRe        GenRe                   0
CPC_V0     AWAITING COMMAND           0
      0     17 running      sa           sa           WinNT      0
CPC_V0     SELECT                     0
      0     19 recv sleep   GenRe        GenRe                   0
CPC_V0     AWAITING COMMAND           0

(14 rows affected)
(return status = 0)
You can see we now have 5 "recv sleep" connexions with the user GenRe. And
PHP is set up to keep only 5 Sybase connexion. So one more refresh of
Sample.php produce the output :
<html>
<body>
Sybase:  Unable to allocate connection record</body></html>
And now, all the Sybase access will abort with this error the only way to
unlock PHP is to kill and restart it.

PS. please forgive my bad English, and thanks for your support.
-----Message d'origine-----
De : Bug Database [mailto:[EMAIL PROTECTED]]
Envoyé : jeudi 19 avril 2001 22:03
À : [EMAIL PROTECTED]
Objet : Bug #10408 Updated: Bad Sybase-CTlib closing


ID: 10408
Updated by: joey
Reported By: [EMAIL PROTECTED]
Old-Status: Open
Status: Feedback
Bug Type: Sybase-ct (ctlib) related
PHP Version: 4.0.4pl1
Assigned To: 
Comments:

Cannot duplicate this locally, can you provide more info?

Previous Comments:
---------------------------------------------------------------------------

[2001-04-19 15:18:52] [EMAIL PROTECTED]
if you run this script :
<html>
<body>
<?
// error handler function
// this function NEVER RETURN (all errors are FATAL) !!
function myErrorHandler($errno,$ErrorMsg)
{       global $connect_id;
        echo $ErrorMsg,'</body></html>';        // I want to see this one
!!!
        exit();  // global exit of php
}

//MAIN PGM:
// set to the user defined error handler
set_error_handler('myErrorHandler');
$connect_id=sybase_connect('MyServer','MyLogin','MyPassword');
if (!$connect_id)
        echo "An error in sybase_query !!<br>"; // I don't want to see this
message
else
{       $res=sybase_query('select * from toto',$connect_id);
        if (!$res)
                echo "An error in sybase_query !!<br>"; // I don't want to
see this message too
        else
                echo 'No error';
}
?>
</html>
</body>
and that the table toto doesn't exist you trigger the myErrorHandler and the
script terminate as intended. The problem is that Sybase doesn't seem aware
of this and the process will live forever even if it doesn't allow Sybase
query any more. So if you run this script a few times all the processes will
be sleeping and you will no more be able to make a Sybase query. I think
there is a problem in the way you handle the Sybase connexion in a error
handler with an exit() call.

---------------------------------------------------------------------------



ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at
http://bugs.php.net/?id=10408&edit=2

-- 
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