ID: 40544 Comment by: yohgaki at ohgaki dot net Reported By: kees at tweakers dot net Status: Assigned Bug Type: PostgreSQL related Operating System: Linux (Debian) PHP Version: 5.2.1 Assigned To: yohgaki New Comment:
I didn't look the backtrace carefully. It stops when PQclear() is called on the backtrace, while my PHP 5.2 stopeed at PQgetReuslt(). (Both of them are called when request is shutting down) For at least PHP 5.2, it would be solved by calling PQcanel() when cleaning up resource, but with compatibility issue. By calling PQcanel() before clean up resource, all async query which is not finished yet will be discarded instead of finishing its query. I'll add new ini option that enables PQcancel() in list_entry_destructor. Any comments? Previous Comments: ------------------------------------------------------------------------ [2007-03-07 22:09:55] yohgaki at ohgaki dot net Since COPY is not a actual SQL statement, PostgreSQL waits forever until COPY ends because the input is STDIN. (SQL Statements like SELECT, UPDATE, DELETE, INSERT will be aborted if there is deadlock) Since PQfinish() (Used while shutting down pgsql connections) does not have option to wait certain amount of time to force closing connection, I'm not sure if it is feasible shutting down w/o waiting to finish COPY, etc. It's possible to force close connection manually using internal PGconn strucutre's connection parameter, but there would be portability issues if it use PGconn internal parameters. I'll see if there is I can do about this in feasible manner. ------------------------------------------------------------------------ [2007-02-19 15:52:58] kees at tweakers dot net tested with the snapshot: [EMAIL PROTECTED]:/usr/src/php5.2-200702191330$ sapi/cli/php test.3.php Starting And now he hangs in a busy wait [ctrl-c] [EMAIL PROTECTED]:/usr/src/php5.2-200702191330$ sapi/cli/php -v PHP 5.2.2-dev (cli) (built: Feb 19 2007 16:49:22) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies ldd sapi/cli/php libpq.so.5 => /usr/lib/libpq.so.5 (0xa7f3c000) ------------------------------------------------------------------------ [2007-02-19 15:19:10] acm at tweakers dot net Btw, when hanging gdb to the php-process and type 'bt' you get this: #0 0xa7ba88c0 in free () from /lib/tls/libc.so.6 #1 0xa7ec8ea7 in PQclear () from /usr/lib/libpq.so.5 #2 0x08086fc8 in _close_pgsql_link (rsrc=0x81e43ec) at /usr/src/php-4.4.2/ext/pgsql/pgsql.c:277 #3 0x08139fb2 in list_entry_destructor (ptr=0x81e43ec) at /usr/src/php-4.4.2/Zend/zend_list.c:177 #4 0x08137977 in zend_hash_apply_deleter (ht=0x81a49e0, p=0x81e43b4) at /usr/src/php-4.4.2/Zend/zend_hash.c:611 #5 0x08137b97 in zend_hash_graceful_reverse_destroy (ht=0x81a49e0) at /usr/src/php-4.4.2/Zend/zend_hash.c:677 #6 0x0812b9ed in shutdown_executor () at /usr/src/php-4.4.2/Zend/zend_execute_API.c:211 #7 0x08133801 in zend_deactivate () at /usr/src/php-4.4.2/Zend/zend.c:689 #8 0x08107862 in php_request_shutdown (dummy=0x0) at /usr/src/php-4.4.2/main/main.c:999 #9 0x0814ee56 in main (argc=2, argv=0xafb6d114) at /usr/src/php-4.4.2/sapi/cli/php_cli.c:881 ------------------------------------------------------------------------ [2007-02-19 15:10:06] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip ------------------------------------------------------------------------ [2007-02-19 14:57:19] kees at tweakers dot net Description: ------------ After opening a db connection to postgresql and executing a query, and after that query a 'die()' php doesnt return to the CLI but hangs Reproduce code: --------------- <? $conn = pg_connect('user=acm dbname=loganalysis'); echo "Starting\n"; $q = " CREATE TEMPORARY TABLE test (test integer); COPY test FROM STDIN WITH DELIMITER ',' CSV QUOTE '\"' ESCAPE '\"'"; pg_query($conn, $q); die("And now he hangs in a busy wait\n"); ?> Expected result: ---------------- [EMAIL PROTECTED]:~$ php test.3.php Starting And now he hangs in a busy wait [EMAIL PROTECTED]:~$ Actual result: -------------- [EMAIL PROTECTED]:~$ php test.3.php Starting And now he hangs in a busy wait [no prompt, you have to ctrl-c to exit] Last part of strace: recv(3, "C\0\0\0\21CREATE TABLE\0G\0\0\0\t\0\0\1\0\0", 16384, 0) = 28 write(1, "And now he hangs in a busy wait\n", 32And now he hangs in a busy wait ) = 32 close(6) = 0 close(5) = 0 close(4) = 0 He probably wants to do a close(3) here as that is the postgresql connection, but it never closes, and netstat will show an open connection: Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 3 [ ] STREAM CONNECTED 549701 - /var/run/postgresql/.s.PGSQL.5432 unix 3 [ ] STREAM CONNECTED 549700 26884/php Tested with PHP 5.2.0-8 (debian package) and PHP 4.4.2 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40544&edit=1