mirror of
https://github.com/MariaDB/server.git
synced 2026-04-25 17:55:31 +02:00
Fix wait_timeout (and kill) handling on Mac OS X by cleaning up how
signal handlers are set up, the blocking flags for sockets are set, and which thread-related functions are used. (Bug #8731) configure.in: Fix flags for Darwin 6 and later. Simplify Darwin 7-9 blocks to simply be a catch-all for *darwin* so that future Darwin releases get the latest flags. include/config-win.h: Define my_sigset() instead of sigset(). include/my_pthread.h: Define my_sigset() instead of trying to monkey with sigset(), and favor an implementation based on sigaction(). mysys/my_pthread.c: Remove pthread_signal(), which is identical to the new my_sigset() macro. mysys/thr_alarm.c: Use my_sigset() instead of sigset(). sql/mysqld.cc: Use my_sigset() instead of signal() and sigset(), remove unnecessary definition of sigset on __amiga__. Remove unused THREAD_SPECIFIC_SIGPIPE code. A future improvement would be to re-assess the use of sigaction() here and convert its usage to use my_sigset(). vio/vio.c: Always call fcntl() to initialize flags of socket in initialization to avoid problems on systems that don't report the flags on a socket correctly right after it has been returned from accept(), such as FreeBSD, Mac OS X, and possibly other BSD-derived systems. vio/viosocket.c: If fcntl() fails in vio_blocking(), restore the flags stored in the vio struct. mysql-test/r/wait_timeout.result: New BitKeeper file ``mysql-test/r/wait_timeout.result'' mysql-test/t/wait_timeout-master.opt: New BitKeeper file ``mysql-test/t/wait_timeout-master.opt'' mysql-test/t/wait_timeout.test: New BitKeeper file ``mysql-test/t/wait_timeout.test''
This commit is contained in:
parent
78f5997ade
commit
e61dea1b36
11 changed files with 77 additions and 99 deletions
|
|
@ -92,7 +92,14 @@ int vio_blocking(Vio * vio __attribute__((unused)), my_bool set_blocking_mode,
|
|||
else
|
||||
vio->fcntl_mode |= O_NONBLOCK; /* set bit */
|
||||
if (old_fcntl != vio->fcntl_mode)
|
||||
r = fcntl(vio->sd, F_SETFL, vio->fcntl_mode);
|
||||
{
|
||||
r= fcntl(vio->sd, F_SETFL, vio->fcntl_mode);
|
||||
if (r == -1)
|
||||
{
|
||||
DBUG_PRINT("info", ("fcntl failed, errno %d", errno));
|
||||
vio->fcntl_mode= old_fcntl;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
r= set_blocking_mode ? 0 : 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue