| Bug #7634 | mysql_pconnect() + lock tables can hang server | ||||
|---|---|---|---|---|---|
| Submitted: | 3 Nov 2000 9:08pm UTC | Modified: | 10 Jun 2002 4:10am UTC | ||
| From: | torben@php.net | Assigned to: | |||
| Status: | Closed | Category: | Documentation problem | ||
| Version: | 4.0 Latest CVS (03/11/2000) | OS: | Mandrake 7.0 | ||
[20 Nov 2001 7:46pm UTC] mfischer@php.net
Can you try latest RC and see if the problem persists http://phpuk.org/~james/php-4.1.0RC3-win32.zip Feedback.
[20 Nov 2001 8:10pm UTC] torben@php.net
Nope, still happens. This is on Debian woody, PHP 4.1.0RC3 (haven't tried on the win32 version you posted a link to, but whatever). Same script.
[20 Nov 2001 10:05pm UTC] torben@php.net
Closed as a Doc problem; added a warning in CVS about the issue. Also included some info regarding transactions behaving similarly from the user notes.
[10 Jun 2002 4:08am UTC] mfischer@php.net
What is 'closing as doc problem' ? :) Reopening until it's really fixed.
[10 Jun 2002 4:10am UTC] mfischer@php.net
My dear, it's already documented in the "Persistent Database" section ... sorry :-p

I've heard about this from a couple of sources and been looking for answers, but haven't found anything definitive. I don't even know if it's solvable. However, when using persistent connections and LOCK TABLES, if for any reason the UNLOCK TABLES never gets executed, the server ends up hanging while it waits for the lock to get released. This is reproduceable for me on every version of PHP I've tried. Example script: <?php /* -*- mode: c++; minor-mode: font -*- */ error_reporting(E_ALL); $dbh = mysql_pconnect($host, $user, $pass); /* Just to test the connection. */ if ($res = mysql_db_query($db, 'show tables', $dbh)) { while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo $row["Tables_in_$db"] . "<br>\n"; } } echo "<hr>\n"; $table = 'category'; echo "Locking table '$table' (if the script blocks here, then the lock never got released)...<br>\n"; flush(); if ($res = mysql_db_query('chaps', "lock tables $table write", $dbh)) { echo "OK; locked.<br>\n"; } else { echo "failed; could not lock.<br>\n"; } flush(); //$res = mysql_db_query('chaps', "unlock tables", $dbh) ?> Is this just me?