From 26e376be67625090c4ed45232f95d48a328573ec Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Oct 2005 23:22:46 +0400 Subject: Fix bug#13535 Incorrect result from SELECT statement after SHOW TABLE STATUS After SHOW TABLE STATUS last_insert_id wasn't cleaned, and next select erroneously rewrites WHERE condition and returs a row; 5.0 isn't affected because of different SHOW TABLE STATUS handling. last_insert_id cleanup added to mysqld_extend_show_tables(). sql/sql_show.cc: Fix bug #13535 Incorrect result from SELECT statement after SHOW TABLE STATUS Added last_insert_id cleanup after SHOW TABLE STATUS command. mysql-test/t/select.test: Test case for bug #13535 Incorrect result from SELECT statement after SHOW TABLE STATUS mysql-test/r/select.result: Test case for bug #13535 Incorrect result from SELECT statement after SHOW TABLE STATUS --- mysql-test/r/select.result | 10 ++++++++++ mysql-test/t/select.test | 10 ++++++++++ sql/sql_show.cc | 12 +++++++++--- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 64cbaf4fa67..8477fa88887 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -2626,3 +2626,13 @@ f1 select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL)); f1 drop table t1,t2; +create table t1 (f1 int not null auto_increment primary key, f2 varchar(10)); +create table t11 like t1; +insert into t1 values(1,""),(2,""); +show table status like 't1%'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 MyISAM 9 Dynamic 2 20 X X X X X X X X latin1_swedish_ci NULL +t11 MyISAM 9 Dynamic 0 0 X X X X X X X X latin1_swedish_ci NULL +select 123 as a from t1 where f1 is null; +a +drop table t1,t11; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index bdadd5c536b..d158932beb1 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -2174,4 +2174,14 @@ select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1)); select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL)); drop table t1,t2; +# +# Bug #13535 +# +create table t1 (f1 int not null auto_increment primary key, f2 varchar(10)); +create table t11 like t1; +insert into t1 values(1,""),(2,""); +--replace_column 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X +show table status like 't1%'; +select 123 as a from t1 where f1 is null; +drop table t1,t11; # End of 4.1 tests diff --git a/sql/sql_show.cc b/sql/sql_show.cc index e619b148f3a..d6ceca5f23c 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -462,6 +462,7 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) TABLE *table; Protocol *protocol= thd->protocol; TIME time; + int res= 0; DBUG_ENTER("mysqld_extend_show_tables"); (void) sprintf(path,"%s/%s",mysql_data_home,db); @@ -632,10 +633,15 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) close_thread_tables(thd,0); } if (protocol->write()) - DBUG_RETURN(-1); + { + res= -1; + break; + } } - send_eof(thd); - DBUG_RETURN(0); + thd->insert_id(0); + if (!res) + send_eof(thd); + DBUG_RETURN(res); } -- cgit v1.2.1 From 59ca6b805d74fcdbad693a937c010e1e1eab94e4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Oct 2005 17:45:23 +0500 Subject: item_cmpfunc.cc: sorry, another wrong variable sql/item_cmpfunc.cc: sorry, another wrong variable --- sql/item_cmpfunc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 7f50e5d0163..2c76c7ec7b3 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -2460,7 +2460,7 @@ bool Item_func_like::fix_fields(THD *thd, TABLE_LIST *tlist, Item ** ref) code instead of Unicode code as "escape" argument. Convert to "cs" if charset of escape differs. */ - CHARSET_INFO *cs= cmp_collation.collation; + CHARSET_INFO *cs= cmp.cmp_collation.collation; uint32 unused; if (escape_str->needs_conversion(escape_str->length(), escape_str->charset(), cs, &unused)) -- cgit v1.2.1 From a32eea11b5087b362c8b5b82c8485e1c66fda1c5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Oct 2005 19:20:49 +0500 Subject: Bug#12476 Some big5 codes are still missing. ctype-big5.c: Adding extra cp950 characters into Unicode mapping. ctype_big5.result, ctype_big5.test: Adding test case strings/ctype-big5.c: Bug#12476 Some big5 codes are still missing. Adding extra cp950 characters into Unicode mapping. mysql-test/t/ctype_big5.test: Adding test case mysql-test/r/ctype_big5.result: Adding test case --- mysql-test/r/ctype_big5.result | 19 +++++++++++++++++++ mysql-test/t/ctype_big5.test | 15 +++++++++++++++ strings/ctype-big5.c | 21 +++++++++++---------- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/mysql-test/r/ctype_big5.result b/mysql-test/r/ctype_big5.result index a31289775fe..4c5832a57e9 100644 --- a/mysql-test/r/ctype_big5.result +++ b/mysql-test/r/ctype_big5.result @@ -170,3 +170,22 @@ SELECT HEX(a) FROM t1 WHERE MATCH(a) AGAINST (0xA741ADCCA66EB6DC IN BOOLEAN MODE HEX(a) A741ADCCA66EB6DC20A7DAADCCABDCA66E DROP TABLE t1; +set names big5; +create table t1 (a char character set big5); +insert into t1 values (0xF9D6),(0xF9D7),(0xF9D8),(0xF9D9); +insert into t1 values (0xF9DA),(0xF9DB),(0xF9DC); +select hex(a) a, hex(@u:=convert(a using utf8)) b, +hex(convert(@u using big5)) c from t1 order by a; +a b c +F9D6 E7A281 F9D6 +F9D7 E98AB9 F9D7 +F9D8 E8A38F F9D8 +F9D9 E5A2BB F9D9 +F9DA E68192 F9DA +F9DB E7B2A7 F9DB +F9DC E5ABBA F9DC +alter table t1 convert to character set utf8; +select hex(a) from t1 where a = _big5 0xF9DC; +hex(a) +E5ABBA +drop table t1; diff --git a/mysql-test/t/ctype_big5.test b/mysql-test/t/ctype_big5.test index 1788dce755b..ffe2a12234e 100644 --- a/mysql-test/t/ctype_big5.test +++ b/mysql-test/t/ctype_big5.test @@ -38,4 +38,19 @@ INSERT INTO t1 VALUES(0xA741ADCCA66EB6DC20A7DAADCCABDCA66E); SELECT HEX(a) FROM t1 WHERE MATCH(a) AGAINST (0xA741ADCCA66EB6DC IN BOOLEAN MODE); DROP TABLE t1; +# +# Bug#12476 Some big5 codes are still missing. +# +set names big5; +create table t1 (a char character set big5); +insert into t1 values (0xF9D6),(0xF9D7),(0xF9D8),(0xF9D9); +insert into t1 values (0xF9DA),(0xF9DB),(0xF9DC); +# Check round trip +select hex(a) a, hex(@u:=convert(a using utf8)) b, +hex(convert(@u using big5)) c from t1 order by a; +# Check that there is no "illegal mix of collations" error with Unicode. +alter table t1 convert to character set utf8; +select hex(a) from t1 where a = _big5 0xF9DC; +drop table t1; + # End of 4.1 tests diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c index 08b0ff009ee..e15554fa576 100644 --- a/strings/ctype-big5.c +++ b/strings/ctype-big5.c @@ -1695,7 +1695,7 @@ static uint16 tab_big5_uni0[]={ 0x2467,0x2468,0x2469,0x2474,0x2475,0x2476,0x2477,0x2478, 0x2479,0x247A,0x247B,0x247C,0x247D}; -/* page 1 0xC940-0xF9D5 */ +/* page 1 0xC940-0xF9DC */ static uint16 tab_big5_uni1[]={ 0x4E42,0x4E5C,0x51F5,0x531A,0x5382,0x4E07,0x4E0C,0x4E47, 0x4E8D,0x56D7,0xFA0C,0x5C6E,0x5F73,0x4E0F,0x5187,0x4E0E, @@ -3251,12 +3251,13 @@ static uint16 tab_big5_uni1[]={ 0x9E17,0x9F48,0x6207,0x6B1E,0x7227,0x864C,0x8EA8,0x9482, 0x9480,0x9481,0x9A69,0x9A68,0x9B2E,0x9E19,0x7229,0x864B, 0x8B9F,0x9483,0x9C79,0x9EB7,0x7675,0x9A6B,0x9C7A,0x9E1D, -0x7069,0x706A,0x9EA4,0x9F7E,0x9F49,0x9F98}; +0x7069,0x706A,0x9EA4,0x9F7E,0x9F49,0x9F98,0x7881,0x92B9, +0x88CF,0x58BB,0x6052,0x7CA7,0x5AFA}; static int func_big5_uni_onechar(int code){ if ((code>=0xA140)&&(code<=0xC7FC)) return(tab_big5_uni0[code-0xA140]); - if ((code>=0xC940)&&(code<=0xF9D5)) + if ((code>=0xC940)&&(code<=0xF9DC)) return(tab_big5_uni1[code-0xC940]); return(0); } @@ -3885,7 +3886,7 @@ static uint16 tab_uni_big57[]={ 0xE54D,0xE552, 0,0xE54E, 0,0xE551,0xBC5C, 0, 0xBEA5,0xBC5B, 0,0xE54A,0xE550, 0,0xBC5A,0xE54F, 0,0xE54C, 0,0xBC58, 0, 0, 0, 0, - 0, 0,0xE94D, 0,0xE94F,0xE94A,0xBEC1,0xE94C, + 0, 0,0xE94D,0xF9D9,0xE94F,0xE94A,0xBEC1,0xE94C, 0,0xBEC0,0xE94E, 0, 0,0xBEC3,0xE950,0xBEC2, 0xE949,0xE94B, 0, 0, 0, 0,0xC0A5,0xECCC, 0,0xC0A4,0xECCD,0xC0A3,0xECCB,0xC0A2,0xECCA, 0, @@ -3957,7 +3958,7 @@ static uint16 tab_uni_big57[]={ 0xE175,0xB9DE,0xE174,0xB9E4, 0,0xE16D,0xB9DF, 0, 0xE17B,0xB9E0,0xE16F,0xE172,0xE177,0xE171,0xE16C, 0, 0, 0, 0,0xE173,0xE555,0xBC61,0xE558,0xE557, -0xE55A,0xE55C, 0,0xBC5F, 0,0xE556, 0,0xE554, +0xE55A,0xE55C,0xF9DC,0xBC5F, 0,0xE556, 0,0xE554, 0,0xE55D,0xE55B,0xE559, 0,0xE55F, 0,0xE55E, 0xBC63,0xBC5E, 0,0xBC60,0xBC62, 0, 0,0xE560, 0xE957, 0, 0,0xE956,0xE955, 0,0xE958,0xE951, @@ -4128,7 +4129,7 @@ static uint16 tab_uni_big57[]={ 0,0xCEC0, 0, 0, 0, 0, 0, 0, 0xCECA,0xD1A1,0xCECB,0xABEE,0xCECE,0xCEC4,0xABED,0xCEC6, 0,0xCEC7, 0, 0,0xCEC9,0xABE9, 0, 0, -0xAEA3, 0, 0,0xCEC5,0xCEC1,0xAEA4, 0, 0, +0xAEA3, 0,0xF9DA,0xCEC5,0xCEC1,0xAEA4, 0, 0, 0xCECF,0xAE7E,0xD17D,0xCEC8, 0,0xD17C,0xCEC3,0xCECC, 0, 0,0xABEC,0xAEA1,0xABF2,0xAEA2,0xCED0,0xD17E, 0xABEB,0xAEA6,0xABF1,0xABF0,0xABEF,0xAEA5,0xCED1,0xAEA7, @@ -4902,7 +4903,7 @@ static uint16 tab_uni_big57[]={ 0xDACF,0xDACE,0xDACB,0xB2B8,0xB577,0xDAC9,0xDACC,0xB578, 0xDACD,0xDACA, 0, 0, 0, 0, 0, 0, 0,0xDEEE, 0,0xDEF2,0xB84E, 0,0xE2F0,0xB851, -0xDEF0, 0, 0,0xDEED,0xDEE8,0xDEEA,0xDEEB,0xDEE4, +0xDEF0,0xF9D6, 0,0xDEED,0xDEE8,0xDEEA,0xDEEB,0xDEE4, 0,0xB84D, 0, 0,0xB84C, 0,0xB848,0xDEE7, 0,0xB84F, 0,0xB850,0xDEE6,0xDEE9,0xDEF1,0xB84A, 0xB84B,0xDEEF,0xDEE5, 0, 0, 0,0xE2F2,0xBAD0, @@ -5034,7 +5035,7 @@ static uint16 tab_uni_big57[]={ 0xD34D,0xAFBB,0xD34B, 0,0xD34C,0xD34E, 0, 0, 0,0xD34A,0xB2C9, 0,0xD6DE,0xB2CB,0xD6E0,0xB2CA, 0xD6DF, 0, 0, 0, 0, 0,0xDAE8,0xB5AF, - 0,0xDAEA,0xDAE7,0xD6E1, 0,0xB5B0, 0, 0, + 0,0xDAEA,0xDAE7,0xD6E1, 0,0xB5B0, 0,0xF9DB, 0xDAE9, 0, 0, 0, 0, 0, 0,0xDF56, 0,0xB864,0xDF54,0xB865,0xDF55,0xB866, 0, 0, 0,0xBAE9,0xE361,0xE35E,0xE360,0xBAEA,0xBAEB,0xE35F, @@ -5423,7 +5424,7 @@ static uint16 tab_uni_big57[]={ 0,0xB5F6,0xDBCD, 0, 0, 0,0xDBC9,0xDBCB, 0xDBC6,0xDBC5,0xDBC3, 0,0xDBCA,0xDBCC,0xDBC8, 0, 0xDBC7,0xB5F4,0xB5F5, 0, 0, 0, 0, 0, - 0,0xDBCF,0xB8CD,0xDFF2,0xDFF8,0xDFF3,0xDFF4, 0, + 0,0xDBCF,0xB8CD,0xDFF2,0xDFF8,0xDFF3,0xDFF4,0xF9D8, 0xDFF9, 0,0xB8CF, 0,0xB8C7,0xB8CE,0xDFF1,0xDBC4, 0xB8CA,0xB8C8,0xDFF7,0xDFF6,0xB8C9,0xB8CB,0xDFF5,0xB8C6, 0,0xB8CC, 0, 0, 0, 0, 0,0xE3F6, @@ -5741,7 +5742,7 @@ static uint16 tab_uni_big57[]={ 0xE47B,0xE4AF,0xE4AC,0xE4A7,0xE477,0xE476,0xE4A1,0xE4B4, 0xBBCF,0xE4B7,0xE47D,0xE4A3,0xBE52, 0, 0, 0, 0, 0,0xBE5A,0xBE55,0xE8A4,0xE8A1,0xE867,0xBE50, - 0, 0, 0,0xBE4F,0xBE56, 0, 0, 0, + 0,0xF9D7, 0,0xBE4F,0xBE56, 0, 0, 0, 0xE865,0xBE54,0xE871,0xE863,0xE864,0xBE4E,0xE8A3,0xBE58, 0xE874,0xE879,0xE873,0xEBEE,0xE86F,0xE877,0xE875,0xE868, 0xE862,0xE87D,0xBE57,0xE87E, 0,0xE878, 0,0xE86D, -- cgit v1.2.1 From ad5f91e7f8d235d5d1faefcf613b7148e2ac02a7 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Oct 2005 09:12:12 -0700 Subject: 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'' --- configure.in | 16 +++------------- include/config-win.h | 2 +- include/my_pthread.h | 35 ++++++++++++++++++++-------------- mysql-test/r/wait_timeout.result | 8 ++++++++ mysql-test/t/wait_timeout-master.opt | 1 + mysql-test/t/wait_timeout.test | 11 +++++++++++ mysys/my_pthread.c | 17 ----------------- mysys/thr_alarm.c | 24 +++++++---------------- sql/mysqld.cc | 37 +++++------------------------------- vio/vio.c | 16 ++++++++++++---- vio/viosocket.c | 9 ++++++++- 11 files changed, 77 insertions(+), 99 deletions(-) create mode 100644 mysql-test/r/wait_timeout.result create mode 100644 mysql-test/t/wait_timeout-master.opt create mode 100644 mysql-test/t/wait_timeout.test diff --git a/configure.in b/configure.in index 97eb0cb0edf..44bfcb46746 100644 --- a/configure.in +++ b/configure.in @@ -1102,7 +1102,7 @@ case $SYSTEM_TYPE in *darwin5*) if test "$ac_cv_prog_gcc" = "yes" then - FLAGS="-traditional-cpp -DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH" + FLAGS="-traditional-cpp -DHAVE_DARWIN5_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH" CFLAGS="$CFLAGS $FLAGS" CXXFLAGS="$CXXFLAGS $FLAGS" MAX_C_OPTIMIZE="-O" @@ -1112,23 +1112,13 @@ case $SYSTEM_TYPE in *darwin6*) if test "$ac_cv_prog_gcc" = "yes" then - FLAGS="-DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH" + FLAGS="-D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH" CFLAGS="$CFLAGS $FLAGS" CXXFLAGS="$CXXFLAGS $FLAGS" MAX_C_OPTIMIZE="-O" fi ;; - *darwin[[7-8]]*) - # don't forget to escape [] like above - if test "$ac_cv_prog_gcc" = "yes" - then - FLAGS="-DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT" - CFLAGS="$CFLAGS $FLAGS" - CXXFLAGS="$CXXFLAGS $FLAGS" - MAX_C_OPTIMIZE="-O" - fi - ;; - *darwin9*) + *darwin*) if test "$ac_cv_prog_gcc" = "yes" then FLAGS="-D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT" diff --git a/include/config-win.h b/include/config-win.h index 0899d961d14..9663947683e 100644 --- a/include/config-win.h +++ b/include/config-win.h @@ -192,7 +192,7 @@ typedef uint rf_SetTimer; /* Convert some simple functions to Posix */ -#define sigset(A,B) signal((A),(B)) +#define my_sigset(A,B) signal((A),(B)) #define finite(A) _finite(A) #define sleep(A) Sleep((A)*1000) #define popen(A) popen(A,B) _popen((A),(B)) diff --git a/include/my_pthread.h b/include/my_pthread.h index d83ddf62a80..b6b65d4389a 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -289,8 +289,6 @@ extern int my_pthread_create_detached; #undef HAVE_PTHREAD_RWLOCK_RDLOCK #undef HAVE_SNPRINTF -#define sigset(A,B) pthread_signal((A),(void (*)(int)) (B)) -#define signal(A,B) pthread_signal((A),(void (*)(int)) (B)) #define my_pthread_attr_setprio(A,B) #endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */ @@ -322,14 +320,26 @@ extern int my_pthread_cond_init(pthread_cond_t *mp, #if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX) int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */ #endif -#if !defined(HAVE_SIGSET) && !defined(HAVE_mit_thread) && !defined(sigset) -#define sigset(A,B) do { struct sigaction s; sigset_t set; \ - sigemptyset(&set); \ - s.sa_handler = (B); \ - s.sa_mask = set; \ - s.sa_flags = 0; \ - sigaction((A), &s, (struct sigaction *) NULL); \ - } while (0) + + +/* + We define my_sigset() and use that instead of the system sigset() so that + we can favor an implementation based on sigaction(). On some systems, such + as Mac OS X, sigset() results in flags such as SA_RESTART being set, and + we want to make sure that no such flags are set. +*/ +#if defined(HAVE_SIGACTION) && !defined(my_sigset) +#define my_sigset(A,B) do { struct sigaction s; sigset_t set; \ + sigemptyset(&set); \ + s.sa_handler = (B); \ + s.sa_mask = set; \ + s.sa_flags = 0; \ + sigaction((A), &s, (struct sigaction *) NULL); \ + } while (0) +#elif defined(HAVE_SIGSET) && !defined(my_sigset) +#define my_sigset(A,B) sigset((A),(B)) +#elif !defined(my_sigset) +#define my_sigset(A,B) signal((A),(B)) #endif #ifndef my_pthread_setprio @@ -409,16 +419,13 @@ struct tm *gmtime_r(const time_t *clock, struct tm *res); #define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } #endif -#ifdef HAVE_DARWIN_THREADS +#ifdef HAVE_DARWIN5_THREADS #define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) #define pthread_kill(A,B) pthread_dummy(0) #define pthread_condattr_init(A) pthread_dummy(0) #define pthread_condattr_destroy(A) pthread_dummy(0) -#define pthread_signal(A,B) pthread_dummy(0) #undef pthread_detach_this_thread #define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); } -#undef sigset -#define sigset(A,B) pthread_signal((A),(void (*)(int)) (B)) #endif #if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER) diff --git a/mysql-test/r/wait_timeout.result b/mysql-test/r/wait_timeout.result new file mode 100644 index 00000000000..56232e481c0 --- /dev/null +++ b/mysql-test/r/wait_timeout.result @@ -0,0 +1,8 @@ +select 1; +1 +1 +select 2; +ERROR HY000: MySQL server has gone away +select 3; +3 +3 diff --git a/mysql-test/t/wait_timeout-master.opt b/mysql-test/t/wait_timeout-master.opt new file mode 100644 index 00000000000..0ad622e9677 --- /dev/null +++ b/mysql-test/t/wait_timeout-master.opt @@ -0,0 +1 @@ +--wait-timeout=2 diff --git a/mysql-test/t/wait_timeout.test b/mysql-test/t/wait_timeout.test new file mode 100644 index 00000000000..26f91569868 --- /dev/null +++ b/mysql-test/t/wait_timeout.test @@ -0,0 +1,11 @@ +# +# Bug #8731: wait_timeout does not work on Mac OS X +# +--disable_reconnect +select 1; +# wait_timeout is 2, so we should get disconnected now +--sleep 5 +--error 2006 +select 2; +--enable_reconnect +select 3; diff --git a/mysys/my_pthread.c b/mysys/my_pthread.c index 37517fb8327..315e966bf43 100644 --- a/mysys/my_pthread.c +++ b/mysys/my_pthread.c @@ -404,23 +404,6 @@ int sigwait(sigset_t *setp, int *sigp) #endif /* DONT_USE_SIGSUSPEND */ #endif /* HAVE_SIGWAIT */ -/***************************************************************************** -** Implement pthread_signal for systems that can't use signal() with threads -** Currently this is only used with BSDI 3.0 -*****************************************************************************/ - -#ifdef USE_PTHREAD_SIGNAL - -int pthread_signal(int sig, void (*func)()) -{ - struct sigaction sact; - sact.sa_flags= 0; - sact.sa_handler= func; - sigemptyset(&sact.sa_mask); - sigaction(sig, &sact, (struct sigaction*) 0); - return 0; -} -#endif /**************************************************************************** The following functions fixes that all pthread functions should work diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c index 05d14073953..e5b77de5e38 100644 --- a/mysys/thr_alarm.c +++ b/mysys/thr_alarm.c @@ -80,17 +80,7 @@ void init_thr_alarm(uint max_alarms) pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST); pthread_cond_init(&COND_alarm,NULL); #if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD) -#if defined(HAVE_mit_thread) - sigset(THR_CLIENT_ALARM,thread_alarm); /* int. thread system calls */ -#else - { - struct sigaction sact; - sact.sa_flags = 0; - bzero((char*) &sact, sizeof(sact)); - sact.sa_handler = thread_alarm; - sigaction(THR_CLIENT_ALARM, &sact, (struct sigaction*) 0); - } -#endif + my_sigset(THR_CLIENT_ALARM,thread_alarm); #endif sigemptyset(&s); sigaddset(&s, THR_SERVER_ALARM); @@ -110,12 +100,12 @@ void init_thr_alarm(uint max_alarms) #elif defined(USE_ONE_SIGNAL_HAND) pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */ #if THR_SERVER_ALARM == THR_CLIENT_ALARM - sigset(THR_CLIENT_ALARM,process_alarm); /* Linuxthreads */ + my_sigset(THR_CLIENT_ALARM,process_alarm); /* Linuxthreads */ pthread_sigmask(SIG_UNBLOCK, &s, NULL); #endif #else + my_sigset(THR_SERVER_ALARM, process_alarm); pthread_sigmask(SIG_UNBLOCK, &s, NULL); - sigset(THR_SERVER_ALARM,process_alarm); #endif DBUG_VOID_RETURN; } @@ -290,7 +280,7 @@ sig_handler process_alarm(int sig __attribute__((unused))) printf("thread_alarm\n"); fflush(stdout); #endif #ifdef DONT_REMEMBER_SIGNAL - sigset(THR_CLIENT_ALARM,process_alarm); /* int. thread system calls */ + my_sigset(THR_CLIENT_ALARM,process_alarm); /* int. thread system calls */ #endif return; } @@ -310,7 +300,7 @@ sig_handler process_alarm(int sig __attribute__((unused))) process_alarm_part2(sig); #ifndef USE_ALARM_THREAD #if defined(DONT_REMEMBER_SIGNAL) && !defined(USE_ONE_SIGNAL_HAND) - sigset(THR_SERVER_ALARM,process_alarm); + my_sigset(THR_SERVER_ALARM,process_alarm); #endif pthread_mutex_unlock(&LOCK_alarm); pthread_sigmask(SIG_SETMASK,&old_mask,NULL); @@ -512,7 +502,7 @@ static sig_handler thread_alarm(int sig) printf("thread_alarm\n"); fflush(stdout); #endif #ifdef DONT_REMEMBER_SIGNAL - sigset(sig,thread_alarm); /* int. thread system calls */ + my_sigset(sig,thread_alarm); /* int. thread system calls */ #endif } #endif @@ -916,7 +906,7 @@ static sig_handler print_signal_warning(int sig) printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name()); fflush(stdout); #ifdef DONT_REMEMBER_SIGNAL - sigset(sig,print_signal_warning); /* int. thread system calls */ + my_sigset(sig,print_signal_warning); /* int. thread system calls */ #endif #ifndef OS2 if (sig == SIGALRM) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a6a91ac32ee..feb63e10b9f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -846,7 +846,7 @@ static void __cdecl kill_server(int sig_ptr) RETURN_FROM_KILL_SERVER; kill_in_progress=TRUE; abort_loop=1; // This should be set - signal(sig,SIG_IGN); + my_sigset(sig,SIG_IGN); if (sig == MYSQL_KILL_SIGNAL || sig == 0) sql_print_information(ER(ER_NORMAL_SHUTDOWN),my_progname); else @@ -894,11 +894,6 @@ extern "C" pthread_handler_decl(kill_server_thread,arg __attribute__((unused))) } #endif -#if defined(__amiga__) -#undef sigset -#define sigset signal -#endif - extern "C" sig_handler print_signal_warning(int sig) { if (!DBUG_IN_USE) @@ -908,7 +903,7 @@ extern "C" sig_handler print_signal_warning(int sig) sig,my_thread_id()); } #ifdef DONT_REMEMBER_SIGNAL - sigset(sig,print_signal_warning); /* int. thread system calls */ + my_sigset(sig,print_signal_warning); /* int. thread system calls */ #endif #if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) if (sig == SIGALRM) @@ -1570,23 +1565,6 @@ void flush_thread_cache() } -/* - Aborts a thread nicely. Commes here on SIGPIPE - TODO: One should have to fix that thr_alarm know about this - thread too. -*/ - -#ifdef THREAD_SPECIFIC_SIGPIPE -extern "C" sig_handler abort_thread(int sig __attribute__((unused))) -{ - THD *thd=current_thd; - DBUG_ENTER("abort_thread"); - if (thd) - thd->killed=1; - DBUG_VOID_RETURN; -} -#endif - /****************************************************************************** Setup a signal thread with handles all signals. Because Linux doesn't support schemas use a mutex to check that @@ -2002,8 +1980,8 @@ static void init_signals(void) DBUG_ENTER("init_signals"); if (test_flags & TEST_SIGINT) - sigset(THR_KILL_SIGNAL,end_thread_signal); - sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called! + my_sigset(THR_KILL_SIGNAL,end_thread_signal); + my_sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called! if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL)) { @@ -2037,13 +2015,8 @@ static void init_signals(void) } #endif (void) sigemptyset(&set); -#ifdef THREAD_SPECIFIC_SIGPIPE - sigset(SIGPIPE,abort_thread); - sigaddset(&set,SIGPIPE); -#else - (void) signal(SIGPIPE,SIG_IGN); // Can't know which thread + my_sigset(SIGPIPE,SIG_IGN); sigaddset(&set,SIGPIPE); -#endif sigaddset(&set,SIGINT); #ifndef IGNORE_SIGHUP_SIGQUIT sigaddset(&set,SIGQUIT); diff --git a/vio/vio.c b/vio/vio.c index 45572b93ed6..f60a53d2f04 100644 --- a/vio/vio.c +++ b/vio/vio.c @@ -136,10 +136,18 @@ Vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost) vio->sd); #if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) #if !defined(NO_FCNTL_NONBLOCK) -#if defined(__FreeBSD__) - fcntl(sd, F_SETFL, vio->fcntl_mode); /* Yahoo! FreeBSD patch */ -#endif - vio->fcntl_mode = fcntl(sd, F_GETFL); + /* + We call fcntl() to set the flags and then immediately read them back + to make sure that we and the system are in agreement on the state of + things. + + An example of why we need to do this is FreeBSD (and apparently some + other BSD-derived systems, like Mac OS X), where the system sometimes + reports that the socket is set for non-blocking when it really will + block. + */ + fcntl(sd, F_SETFL, vio->fcntl_mode); + vio->fcntl_mode= fcntl(sd, F_GETFL); #elif defined(HAVE_SYS_IOCTL_H) /* hpux */ /* Non blocking sockets doesn't work good on HPUX 11.0 */ (void) ioctl(sd,FIOSNBIO,0); diff --git a/vio/viosocket.c b/vio/viosocket.c index 5213390e2e6..8d4c2387632 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -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; -- cgit v1.2.1 From d37c2aed23b1c2d2e9fbd956d5162d1802e3851e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Oct 2005 15:23:34 -0700 Subject: Fix read past allocated buffer when parsing charsets file. (Bug #6413) strings/xml.c: Don't look for comment past end of buffer. --- strings/xml.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/strings/xml.c b/strings/xml.c index 6ba52ea41a8..cec15b99f10 100644 --- a/strings/xml.c +++ b/strings/xml.c @@ -81,7 +81,7 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a) a->beg=p->cur; a->end=p->cur; - if (!bcmp(p->cur,"", 3); p->cur++) {} -- cgit v1.2.1 From 7442890e152a05a127a4371eb5a6ad615130b76b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Oct 2005 18:50:25 +0500 Subject: memcpy_overlap() removed, as 1. it's wrong to use memcpy() for overlapped areas; 2. we use it only once. During merge to 4.1 will remove a memcpy_overlap() call from strings/ctype-tis620.c as well in order to fix bug #10836: ctype_tis620 test failure with ICC-compiled binaries on IA64. myisam/mi_search.c: use memmove() instead, as memcpy_overlap() is removed. --- include/m_string.h | 10 ---------- myisam/mi_search.c | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/include/m_string.h b/include/m_string.h index 419e70d93bf..f081c966fac 100644 --- a/include/m_string.h +++ b/include/m_string.h @@ -119,16 +119,6 @@ extern void bmove_allign(gptr dst,const gptr src,uint len); #define bmove512(A,B,C) memcpy(A,B,C) #endif -#ifdef HAVE_purify -#include -#define memcpy_overlap(A,B,C) \ -DBUG_ASSERT((A) <= (B) || ((B)+(C)) <= (A)); \ -bmove((byte*) key,(byte*) from,(size_t) length); -#else -#define memcpy_overlap(A,B,C) memcpy((A), (B), (C)) -#endif /* HAVE_purify */ - - /* Prototypes for string functions */ #if !defined(bfill) && !defined(HAVE_BFILL) diff --git a/myisam/mi_search.c b/myisam/mi_search.c index c0be1a427df..3d16a70d70b 100644 --- a/myisam/mi_search.c +++ b/myisam/mi_search.c @@ -1306,7 +1306,7 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag, } DBUG_PRINT("info",("key: %p from: %p length: %u", key, from, length)); - memcpy_overlap((byte*) key, (byte*) from, (size_t) length); + memmove((byte*) key, (byte*) from, (size_t) length); key+=length; from+=length; } -- cgit v1.2.1 From 9c6dc97f635ea1f6bbd353c9260b81607c1bd89e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Oct 2005 13:25:07 +0500 Subject: memcpy_overlap() replaced with memmove() during the merging. strings/ctype-tis620.c: memcpy_overlap() replaced with memmove() during the merge. --- strings/ctype-tis620.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index dcb0e0525b4..35cf10f1bcc 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -498,7 +498,7 @@ static uint thai2sortable(uchar *tstr, uint len) l2bias use to control position weight of l2char example (*=l2char) XX*X must come before X*XX */ - memcpy_overlap((char*) p, (char*) (p+1), tlen-1); + memmove((char*) p, (char*) (p+1), tlen-1); tstr[len-1]= l2bias + t_ctype0[1]- L2_GARAN +1; p--; continue; -- cgit v1.2.1 From 8f391a217ece963d00dc6396bca731d4215e4416 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Oct 2005 17:21:14 +0300 Subject: Some Netware related fixes and fixes for Metrowerks compiler. netware/BUILD/mwenv: Removed -O3 for Metrowerks compiler. netware/pack_isam.def: NetWare specific change, Added SCRENNAME for pack_isam. scripts/make_binary_distribution.sh: Netware specific change for creating help tables. strings/my_strtoll10.c: Fix for Metrowerks compiler. --- netware/BUILD/mwenv | 4 ++-- netware/pack_isam.def | 1 + scripts/make_binary_distribution.sh | 3 +-- strings/my_strtoll10.c | 9 +++++++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/netware/BUILD/mwenv b/netware/BUILD/mwenv index 0acfd3aaf8f..0b3fa9beb6a 100755 --- a/netware/BUILD/mwenv +++ b/netware/BUILD/mwenv @@ -19,9 +19,9 @@ export AR='mwldnlm' export AR_FLAGS='-type library -o' export AS='mwasmnlm' export CC='mwccnlm -gccincludes' -export CFLAGS='-O3 -align 8 -proc 686 -relax_pointers -dialect c' +export CFLAGS='-align 8 -proc 686 -relax_pointers -dialect c' export CXX='mwccnlm -gccincludes' -export CXXFLAGS='-O3 -align 8 -proc 686 -relax_pointers -dialect c++ -bool on -wchar_t on -D_WCHAR_T' +export CXXFLAGS='-align 8 -proc 686 -relax_pointers -dialect c++ -bool on -wchar_t on -D_WCHAR_T' export LD='mwldnlm' export LDFLAGS='-entry _LibCPrelude -exit _LibCPostlude -map -flags pseudopreemption' export RANLIB=: diff --git a/netware/pack_isam.def b/netware/pack_isam.def index b93cfdffbeb..fff74806f39 100644 --- a/netware/pack_isam.def +++ b/netware/pack_isam.def @@ -4,6 +4,7 @@ MODULE libc.nlm COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL ISAM Table Pack Tool" +SCREENNAME "MySQL ISAM Table Pack Tool" VERSION 4, 0 XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index d622dfed9d3..c00ba1c6f57 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -254,8 +254,7 @@ if [ $BASE_SYSTEM = "netware" ] ; then >> $BASE/bin/init_db.sql sh ./scripts/mysql_create_system_tables.sh test "" "%" 0 \ > $BASE/bin/test_db.sql -# cp ./netware/static_init_db.sql ./netware/init_db.sql -# ./scripts/fill_help_tables < ./Docs/manual.texi >> ./netware/init_db.sql + ./scripts/fill_help_tables < ./Docs/manual.texi >> ./netware/init_db.sql fi # diff --git a/strings/my_strtoll10.c b/strings/my_strtoll10.c index 5217564087c..9cfb11524c1 100644 --- a/strings/my_strtoll10.c +++ b/strings/my_strtoll10.c @@ -19,7 +19,16 @@ #include #undef ULONGLONG_MAX +/* + Needed under MetroWerks Compiler, since MetroWerks compiler does not + properly handle a constant expression containing a mod operator +*/ +#if defined(__NETWARE__) && defined(__MWERKS__) +static ulonglong ulonglong_max= ~(ulonglong) 0; +#define ULONGLONG_MAX ulonglong_max +#else #define ULONGLONG_MAX (~(ulonglong) 0) +#endif /* __NETWARE__ && __MWERKS__ */ #define MAX_NEGATIVE_NUMBER ((ulonglong) LL(0x8000000000000000)) #define INIT_CNT 9 #define LFACTOR ULL(1000000000) -- cgit v1.2.1