diff options
author | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2009-11-10 17:09:27 -0200 |
---|---|---|
committer | Davi Arnaut <Davi.Arnaut@Sun.COM> | 2009-11-10 17:09:27 -0200 |
commit | 80582b000f5cd5f6dfb24bed45df907b2c96ab02 (patch) | |
tree | 7d7b2c23c7122f5a51de6981e2668f74529dce21 /include/violite.h | |
parent | e26de1ca16d60870184a6a30504c02bce5c4070d (diff) | |
download | mariadb-git-80582b000f5cd5f6dfb24bed45df907b2c96ab02.tar.gz |
Backport of Bug#10374 to mysql-next-mr
------------------------------------------------------------
revno: 2597.37.3
revision-id: sp1r-davi@mysql.com/endora.local-20080328123626-16430
parent: sp1r-anozdrin/alik@quad.opbmk-20080327125300-11290
committer: davi@mysql.com/endora.local
timestamp: Fri 2008-03-28 09:36:26 -0300
message:
Bug#10374 GET_LOCK does not let connection to close on the server side if it's aborted
The problem is that the server doesn't detect aborted connections which
are waiting on a lock or sleeping (user sleep), wasting system resources
for a connection that is already dead.
The solution is to peek at the connection every five seconds to verify if
the connection is not aborted. A aborted connection is detect by polling
the connection socket for available data to be read or end of file and in
case of eof, the wait is aborted and the connection killed.
include/violite.h:
Export vio_peek_read function.
mysql-test/r/dirty_close.result:
Add test case result for Bug#10374
mysql-test/t/dirty_close.test:
Add test case for Bug#10374
sql/item_func.cc:
While waiting for a condition to be signaled, check if the connection
is not broken every INTERRUPT_INTERVAL seconds.
sql/sql_class.cc:
Add function which checks if the client connection was aborted.
sql/sql_class.h:
Add function prototype.
vio/viosocket.c:
Add poll and peek functions for Windows and Unix.
Diffstat (limited to 'include/violite.h')
-rw-r--r-- | include/violite.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/violite.h b/include/violite.h index f833606233c..0e07e1c69ca 100644 --- a/include/violite.h +++ b/include/violite.h @@ -88,6 +88,7 @@ my_bool vio_peer_addr(Vio* vio, char *buf, uint16 *port); /* Remotes in_addr */ void vio_in_addr(Vio *vio, struct in_addr *in); my_bool vio_poll_read(Vio *vio,uint timeout); +my_bool vio_peek_read(Vio *vio, uint *bytes); #ifdef HAVE_OPENSSL #include <openssl/opensslv.h> |