1 # name : remove_fcntl_excessive_calls.patch
6 # Any small change to this file in the main branch
7 # should be done or reviewed by the maintainer!
8 diff -ruN a/patch_info/remove_fcntl_excessive_calls.info b/patch_info/remove_fcntl_excessive_calls.info
9 --- a/patch_info/remove_fcntl_excessive_calls.info 1970-01-01 03:00:00.000000000 +0300
10 +++ b/patch_info/remove_fcntl_excessive_calls.info 2010-07-22 21:42:08.560424001 +0400
12 +File=remove_fcntl_excessive_calls.patch
13 +Name=remove fcntl excessive calls
15 +Author=This is a port of the official fix.
18 diff -ruN a/sql/net_serv.cc b/sql/net_serv.cc
19 --- a/sql/net_serv.cc 2010-06-03 19:50:27.000000000 +0400
20 +++ b/sql/net_serv.cc 2010-07-22 21:40:30.680424001 +0400
22 if (vio != 0) /* If real connection */
24 net->fd = vio_fd(vio); /* For perl DBI/DBD */
25 -#if defined(MYSQL_SERVER) && !defined(__WIN__)
26 +#if defined(MYSQL_SERVER) && !defined(__WIN__) && !defined(NO_ALARM)
27 if (!(test_flags & TEST_BLOCKING))
31 if ((long) (length= vio_write(net->vio,pos,(size_t) (end-pos))) <= 0)
33 my_bool interrupted = vio_should_retry(net->vio);
34 -#if !defined(__WIN__)
35 +#if !defined(NO_ALARM) && !defined(__WIN__)
36 if ((interrupted || length == 0) && !thr_alarm_in_use(&alarmed))
38 if (!thr_alarm(&alarmed, net->write_timeout, &alarm_buff))
41 #endif /* EXTRA_DEBUG */
43 -#if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER)
44 +#if defined(THREAD_SAFE_CLIENT) && defined(NO_ALARM)
45 if (vio_errno(net->vio) == SOCKET_EINTR)
47 DBUG_PRINT("warning",("Interrupted write. Retrying..."));
50 update_statistics(thd_increment_bytes_sent(length));
53 +#if !defined(NO_ALARM) && !defined(__WIN__)
58 thr_alarm(&alarmed,net->read_timeout,&alarm_buff);
60 /* Read timeout is set in my_net_set_read_timeout */
61 + DBUG_ASSERT(net_blocking);
64 pos = net->buff + net->where_b; /* net->packet -4 */
67 DBUG_PRINT("info",("vio_read returned %ld errno: %d",
68 (long) length, vio_errno(net->vio)));
69 -#if !defined(__WIN__) || defined(MYSQL_SERVER)
70 +#if !defined(NO_ALARM) && (!defined(__WIN__) || defined(MYSQL_SERVER))
72 We got an error that there was no data on the socket. We now set up
73 an alarm to not 'read forever', change the socket to non blocking
75 my_progname,vio_errno(net->vio));
76 #endif /* EXTRA_DEBUG */
78 -#if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER)
79 +#if defined(THREAD_SAFE_CLIENT) && defined(NO_ALARM)
80 if (vio_errno(net->vio) == SOCKET_EINTR)
82 DBUG_PRINT("warning",("Interrupted read. Retrying..."));