← Back to team overview

maria-developers team mailing list archive

bzr commit into MariaDB 5.1, with Maria 1.5:maria branch (monty:2787)

 

#At lp:maria based on revid:knielsen@xxxxxxxxxxxxxxx-20100105142834-adpbyr6x7edubwps

 2787 Michael Widenius	2010-01-06
      Removed compiler warnings
      Fixed sporadic test failure for suit/pbxt/t/lock_multi.test
      Fixed sporadic test faulure for suit/rpl/t/do_grant.test
      OpenSolaris 5.11-x86 now compiles (tested with 32 bit)
      modified:
        BUILD/compile-solaris-amd64-debug-forte*
        BUILD/compile-solaris-x86-32*
        BUILD/compile-solaris-x86-32-debug*
        BUILD/compile-solaris-x86-32-debug-forte*
        BUILD/compile-solaris-x86-forte-32*
        extra/libevent/devpoll.c
        extra/libevent/evbuffer.c
        extra/libevent/select.c
        mysql-test/mysql-test-run.pl
        mysql-test/suite/pbxt/r/lock_multi.result
        mysql-test/suite/pbxt/t/lock_multi.test
        mysys/my_sync.c
        sql/ha_ndbcluster.cc
        storage/archive/azlib.h
        storage/maria/ma_blockrec.c
        storage/maria/ma_loghandler.c
        storage/maria/ma_test3.c
        storage/myisam/mi_test3.c
        storage/pbxt/src/ha_pbxt.cc
        storage/pbxt/src/restart_xt.cc
        storage/pbxt/src/thread_xt.cc
        storage/pbxt/src/thread_xt.h
        storage/xtradb/srv/srv0srv.c
        support-files/compiler_warnings.supp

per-file messages:
  BUILD/compile-solaris-amd64-debug-forte
    Added execute bit
  BUILD/compile-solaris-x86-32
    Added execute bit
  BUILD/compile-solaris-x86-32-debug
    Added execute bit
  BUILD/compile-solaris-x86-32-debug-forte
    Added execute bit
  BUILD/compile-solaris-x86-forte-32
    Added execute bit
  extra/libevent/devpoll.c
    Removed compiler warning
  extra/libevent/evbuffer.c
    Removed compiler warning
  extra/libevent/select.c
    Removed compiler warning
  mysql-test/mysql-test-run.pl
    Fixed sporadic test faulure for suit/rpl/t/do_grant.test (Seen on OpenSolaris)
  mysql-test/suite/pbxt/r/lock_multi.result
    Fixed sporadic test failure for suit/pbxt/t/lock_multi.test (seen in buildbot)
    This was done by merging the test with main/lock_multi.test
  mysql-test/suite/pbxt/t/lock_multi.test
    Fixed sporadic test failure for suit/pbxt/t/lock_multi.test (seen in buildbot)
    This was done by merging the test with main/lock_multi.test
  mysys/my_sync.c
    Removed compiler warnings
  sql/ha_ndbcluster.cc
    Fixed linking error on OpenSolaris when compiling without ndb
    Bug #34866 Can't compile on Solaris 9/Sparc with gcc
  storage/archive/azlib.h
    Removed compiler warning about redefined symbols
  storage/maria/ma_blockrec.c
    Removed compiler warning
  storage/maria/ma_loghandler.c
    Removed compiler warning
  storage/maria/ma_test3.c
    Removed compiler warning
  storage/myisam/mi_test3.c
    Removed compiler warning
  storage/pbxt/src/ha_pbxt.cc
    Removed compiler warning
    thr_main -> thr_main_pbxt
  storage/pbxt/src/restart_xt.cc
    thr_main -> thr_main_pbxt
  storage/pbxt/src/thread_xt.cc
    thr_main -> thr_main_pbxt
    This was needed as thr_main() is an internal thread function on OpenSolaris()
  storage/pbxt/src/thread_xt.h
    thr_main -> thr_main_pbxt
  storage/xtradb/srv/srv0srv.c
    Use compatiblity macro to get code to work on OpenSolaris
  support-files/compiler_warnings.supp
    Ignore compiler warning from yassl
=== modified file 'BUILD/compile-solaris-amd64-debug-forte' (properties changed: -x to +x)
=== modified file 'BUILD/compile-solaris-x86-32' (properties changed: -x to +x)
=== modified file 'BUILD/compile-solaris-x86-32-debug' (properties changed: -x to +x)
=== modified file 'BUILD/compile-solaris-x86-32-debug-forte' (properties changed: -x to +x)
=== modified file 'BUILD/compile-solaris-x86-forte-32' (properties changed: -x to +x)
=== modified file 'extra/libevent/devpoll.c'
--- a/extra/libevent/devpoll.c	2009-03-12 22:27:35 +0000
+++ b/extra/libevent/devpoll.c	2010-01-06 21:27:53 +0000
@@ -185,7 +185,9 @@ devpoll_init(struct event_base *base)
 }
 
 static int
-devpoll_recalc(struct event_base *base, void *arg, int max)
+devpoll_recalc(struct event_base *base __attribute__((unused)),
+               void *arg __attribute__((unused)),
+               int max)
 {
 	struct devpollop *devpollop = arg;
 

=== modified file 'extra/libevent/evbuffer.c'
--- a/extra/libevent/evbuffer.c	2009-03-12 22:27:35 +0000
+++ b/extra/libevent/evbuffer.c	2010-01-06 21:27:53 +0000
@@ -25,12 +25,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/types.h>
-
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#include <sys/types.h>
+
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
@@ -75,7 +75,8 @@ bufferevent_add(struct event *ev, int ti
  */
 
 void
-bufferevent_read_pressure_cb(struct evbuffer *buf, size_t old, size_t now,
+bufferevent_read_pressure_cb(struct evbuffer *buf,
+                             size_t old __attribute__((unused)), size_t now,
     void *arg) {
 	struct bufferevent *bufev = arg;
 	/* 

=== modified file 'extra/libevent/select.c'
--- a/extra/libevent/select.c	2009-03-12 22:27:35 +0000
+++ b/extra/libevent/select.c	2010-01-06 21:27:53 +0000
@@ -266,7 +266,7 @@ select_add(void *arg, struct event *ev)
 	 * of the fd_sets for select(2)
 	 */
 	if (sop->event_fds < ev->ev_fd) {
-		int fdsz = sop->event_fdsz;
+		unsigned int fdsz = sop->event_fdsz;
 
 		if (fdsz < sizeof(fd_mask))
 			fdsz = sizeof(fd_mask);
@@ -275,7 +275,7 @@ select_add(void *arg, struct event *ev)
 		    (howmany(ev->ev_fd + 1, NFDBITS) * sizeof(fd_mask)))
 			fdsz *= 2;
 
-		if (fdsz != sop->event_fdsz) {
+		if (fdsz != (unsigned int) sop->event_fdsz) {
 			if (select_resize(sop, fdsz)) {
 				check_selectop(sop);
 				return (-1);

=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl	2010-01-05 14:28:34 +0000
+++ b/mysql-test/mysql-test-run.pl	2010-01-06 21:27:53 +0000
@@ -4010,6 +4010,7 @@ sub extract_warning_lines ($) {
      qr/Slave I\/O: error reconnecting to master '.*' - retry-time: [1-3]  retries/,
      qr/Error reading packet/,
      qr/Slave: Can't drop database.* database doesn't exist/,
+     qr/Slave: Operation DROP USER failed for 'create_rout_db'/,
     );
 
   my $matched_lines= [];

=== modified file 'mysql-test/suite/pbxt/r/lock_multi.result'
--- a/mysql-test/suite/pbxt/r/lock_multi.result	2009-04-02 10:03:14 +0000
+++ b/mysql-test/suite/pbxt/r/lock_multi.result	2010-01-06 21:27:53 +0000
@@ -1,22 +1,4 @@
 drop table if exists t1,t2;
-create table t1(n int);
-insert into t1 values (1);
-lock tables t1 write;
-update low_priority t1 set n = 4;
-select n from t1;
-unlock tables;
-n
-1
-drop table t1;
-create table t1(n int);
-insert into t1 values (1);
-lock tables t1 read;
-update low_priority t1 set n = 4;
-select n from t1;
-unlock tables;
-n
-1
-drop table t1;
 create table t1 (a int, b int);
 create table t2 (c int, d int);
 insert into t1 values(1,1);
@@ -43,6 +25,7 @@ insert t1 select * from t2;
 drop table t2;
 ERROR 42S02: Table 'test.t2' doesn't exist
 drop table t1;
+End of 4.1 tests
 create table t1(a int);
 lock tables t1 write;
 show columns from t1;
@@ -50,10 +33,10 @@ Field	Type	Null	Key	Default	Extra
 a	int(11)	YES		NULL	
 unlock tables;
 drop table t1;
-use mysql;
+USE mysql;
 LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
 FLUSH TABLES;
-use mysql;
+USE mysql;
 SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
 OPTIMIZE TABLES columns_priv, db, host, user;
 Table	Op	Msg_type	Msg_text
@@ -63,7 +46,8 @@ mysql.host	optimize	status	OK
 mysql.user	optimize	status	OK
 UNLOCK TABLES;
 Select_priv
-use test;
+N
+USE test;
 use test;
 CREATE TABLE t1 (c1 int);
 LOCK TABLE t1 WRITE;
@@ -90,7 +74,115 @@ DROP DATABASE mysqltest_1;
 ERROR HY000: Can't drop database 'mysqltest_1'; database doesn't exist
 create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) engine=innodb;
 lock tables t1 write;
-alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
-alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
+alter table t1 auto_increment=0;
+alter table t1 auto_increment=0;
+unlock tables;
+drop table t1;
+create table t1 (a int);
+create table t2 like t1;
+# con1
+lock tables t1 write;
+# con2
+flush tables with read lock;
+# con5
+# global read lock is taken
+# con3
+select * from t2 for update;
+# waiting for release of read lock
+# con4
+# would hang and later cause a deadlock
+flush tables t2;
+# clean up
+unlock tables;
+unlock tables;
+a
+drop table t1,t2;
+#
+# Lightweight version:
+# Ensure that the wait for a GRL is done before opening tables.
+#
+create table t1 (a int);
+create table t2 like t1;
+#
+# UPDATE
+#
+# default
+flush tables with read lock;
+# con1
+update t2 set a = 1;
+# default
+# statement is waiting for release of read lock
+# con2
+flush table t2;
+# default
+unlock tables;
+# con1
+#
+# LOCK TABLES .. WRITE
+#
+# default
+flush tables with read lock;
+# con1
+lock tables t2 write;
+# default
+# statement is waiting for release of read lock
+# con2
+flush table t2;
+# default
+unlock tables;
+# con1
+unlock tables;
+drop table t1,t2;
+End of 5.0 tests
+create table t1 (i int);
+lock table t1 read;
+update t1 set i= 10;
+select * from t1;
+Timeout in wait_condition.inc for select count(*) = 1 from information_schema.processlist
+where state = "Locked" and info = "select * from t1"
+kill query ID;
+i
+ERROR 70100: Query execution was interrupted
+unlock tables;
+drop table t1;
+drop table if exists t1;
+create table t1 (i int);
+connection: default
+lock tables t1 write;
+connection: flush
+flush tables with read lock;;
+connection: default
+alter table t1 add column j int;
+connection: insert
+insert into t1 values (1,2);;
+connection: default
+unlock tables;
+connection: flush
+select * from t1;
+i	j
+unlock tables;
+select * from t1;
+i	j
+1	2
+drop table t1;
+drop table if exists t1;
+create table t1 (i int);
+connection: default
+lock tables t1 write;
+connection: flush
+flush tables with read lock;;
+connection: default
+flush tables;
+unlock tables;
+drop table t1;
+drop table if exists t1,t2;
+create table t1 (a int);
+flush status;
+lock tables t1 read;
+insert into t1 values(1);;
 unlock tables;
 drop table t1;
+select @tlwa < @tlwb;
+@tlwa < @tlwb
+1
+End of 5.1 tests

=== modified file 'mysql-test/suite/pbxt/t/lock_multi.test'
--- a/mysql-test/suite/pbxt/t/lock_multi.test	2009-04-02 10:03:14 +0000
+++ b/mysql-test/suite/pbxt/t/lock_multi.test	2010-01-06 21:27:53 +0000
@@ -1,4 +1,8 @@
 -- source include/not_embedded.inc
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
 --disable_warnings
 drop table if exists t1,t2;
 --enable_warnings
@@ -9,42 +13,6 @@ connect (locker,localhost,root,,);
 connect (reader,localhost,root,,);
 connect (writer,localhost,root,,);
 
-connection locker;
-create table t1(n int);
-insert into t1 values (1);
-lock tables t1 write;
-connection writer;
-send update low_priority t1 set n = 4;
-connection reader;
---sleep 2
-send select n from t1;
-connection locker;
---sleep 2
-unlock tables;
-connection writer;
-reap;
-connection reader;
-reap;
-drop table t1;
-
-connection locker;
-create table t1(n int);
-insert into t1 values (1);
-lock tables t1 read;
-connection writer;
-send update low_priority t1 set n = 4;
-connection reader;
---sleep 2
-send select n from t1;
-connection locker;
---sleep 2
-unlock tables;
-connection writer;
-reap;
-connection reader;
-reap;
-drop table t1;
-
 #
 # Test problem when using locks with multi-updates
 # It should not block when multi-update is reading on a read-locked table
@@ -58,32 +26,33 @@ insert into t1 values(2,2);
 insert into t2 values(1,2);
 lock table t1 read;
 connection writer;
---sleep 2
-send update t1,t2 set c=a where b=d;
+update t1,t2 set c=a where b=d;
 connection reader;
---sleep 2
 select c from t2;
-connection writer;
-reap;
 connection locker;
 drop table t1;
 drop table t2;
 
 #
-# Test problem when using locks on many tables and droping a table that
+# Test problem when using locks on many tables and dropping a table that
 # is to-be-locked by another thread
 #
-
+#
 connection locker;
 create table t1 (a int);
 create table t2 (a int);
 lock table t1 write, t2 write;
 connection reader;
-send insert t1 select * from t2;
+send
+insert t1 select * from t2;
 connection locker;
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Locked" and info = "insert t1 select * from t2";
+--source include/wait_condition.inc
 drop table t2;
 connection reader;
---error 1146
+--error ER_NO_SUCH_TABLE
 reap;
 connection locker;
 drop table t1;
@@ -97,20 +66,26 @@ create table t1 (a int);
 create table t2 (a int);
 lock table t1 write, t2 write, t1 as t1_2 write, t2 as t2_2 write;
 connection reader;
-send insert t1 select * from t2;
+send
+insert t1 select * from t2;
 connection locker;
+# Sleep a bit till the insert of connection reader is in work and hangs
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Locked" and info = "insert t1 select * from t2";
+--source include/wait_condition.inc
 drop table t2;
 connection reader;
---error 1146
+--error ER_NO_SUCH_TABLE
 reap;
 connection locker;
 drop table t1;
 
 
-# End of 4.1 tests
+--echo End of 4.1 tests
 
 #
-# BUG#9998 - MySQL client hangs on USE "database"
+# Bug#9998 MySQL client hangs on USE "database"
 #
 create table t1(a int);
 lock tables t1 write;
@@ -121,21 +96,30 @@ unlock tables;
 drop table t1;
 
 #
-# Bug#16986 - Deadlock condition with MyISAM tables
+# Bug#16986 Deadlock condition with MyISAM tables
 #
+
+# Need a matching user in mysql.user for multi-table select
+--source include/add_anonymous_users.inc
+
 connection locker;
-use mysql;
+USE mysql;
 LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
 FLUSH TABLES;
---sleep 1
 #
 connection reader;
-use mysql;
-#NOTE:  This must be a multi-table select, otherwise the deadlock will not occur
-send SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
---sleep 1
+USE mysql;
+# Note:  This must be a multi-table select, otherwise the deadlock will not occur
+send
+SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
 #
 connection locker;
+# Sleep a bit till the select of connection reader is in work and hangs
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Waiting for table" and info =
+  "SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1";
+--source include/wait_condition.inc
 # Make test case independent from earlier grants.
 --replace_result "Table is already up to date" "OK"
 OPTIMIZE TABLES columns_priv, db, host, user;
@@ -143,7 +127,7 @@ UNLOCK TABLES;
 #
 connection reader;
 reap;
-use test;
+USE test;
 #
 connection locker;
 use test;
@@ -158,11 +142,16 @@ LOCK TABLE t1 WRITE;
 #
 # This waits until t1 is unlocked.
 connection locker;
-send FLUSH TABLES WITH READ LOCK;
---sleep 1
+send
+FLUSH TABLES WITH READ LOCK;
 #
-# This must not block.
 connection writer;
+# Sleep a bit till the flush of connection locker is in work and hangs
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Flushing tables" and info = "FLUSH TABLES WITH READ LOCK";
+--source include/wait_condition.inc
+# This must not block.
 CREATE TABLE t2 (c1 int);
 UNLOCK TABLES;
 #
@@ -182,12 +171,17 @@ LOCK TABLE t1 WRITE;
 #
 # This waits until t1 is unlocked.
 connection locker;
-send FLUSH TABLES WITH READ LOCK;
---sleep 1
+send
+FLUSH TABLES WITH READ LOCK;
 #
 # This must not block.
 connection writer;
---error 1100
+# Sleep a bit till the flush of connection locker is in work and hangs
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Flushing tables" and info = "FLUSH TABLES WITH READ LOCK";
+--source include/wait_condition.inc
+--error ER_TABLE_NOT_LOCKED
 CREATE TABLE t2 AS SELECT * FROM t1;
 UNLOCK TABLES;
 #
@@ -199,8 +193,10 @@ UNLOCK TABLES;
 connection default;
 DROP TABLE t1;
 
+--source include/delete_anonymous_users.inc
+
 #
-# Bug#19815 - CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
+# Bug#19815 CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
 #
 connect (con1,localhost,root,,);
 connect (con2,localhost,root,,);
@@ -212,12 +208,18 @@ FLUSH TABLES WITH READ LOCK;
 # With bug in place: acquire LOCK_mysql_create_table and
 # wait in wait_if_global_read_lock().
 connection con2;
-send DROP DATABASE mysqltest_1;
---sleep 1
+send
+DROP DATABASE mysqltest_1;
 #
 # With bug in place: try to acquire LOCK_mysql_create_table...
 # When fixed: Reject dropping db because of the read lock.
 connection con1;
+# Wait a bit so that the session con2 is in state "Waiting for release of readlock"
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Waiting for release of readlock"
+  and info = "DROP DATABASE mysqltest_1";
+--source include/wait_condition.inc
 --error ER_CANT_UPDATE_WITH_READLOCK
 DROP DATABASE mysqltest_1;
 UNLOCK TABLES;
@@ -234,7 +236,7 @@ disconnect con2;
 DROP DATABASE mysqltest_1;
 
 #
-# Bug #17264: MySQL Server freeze
+# Bug#17264 MySQL Server freeze
 #
 connection locker;
 # Disable warnings to allow test to run also without InnoDB
@@ -243,17 +245,22 @@ create table t1 (f1 int(12) unsigned not
 --enable_warnings
 lock tables t1 write;
 connection writer;
---sleep 2
-delimiter //;
-send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
-delimiter ;//
-connection reader;
---sleep 2
-delimiter //;
-send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
-delimiter ;//
-connection locker;
---sleep 2
+send
+alter table t1 auto_increment=0;
+connection reader;
+# Wait till connection writer is blocked
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Locked" and info = "alter table t1 auto_increment=0";
+--source include/wait_condition.inc
+send
+alter table t1 auto_increment=0;
+connection locker;
+# Wait till connection reader is blocked
+let $wait_condition=
+  select count(*) = 2 from information_schema.processlist
+  where state = "Locked" and info = "alter table t1 auto_increment=0";
+--source include/wait_condition.inc
 unlock tables;
 connection writer;
 reap;
@@ -262,8 +269,310 @@ reap;
 connection locker;
 drop table t1;
 
+#
+# Bug#43230: SELECT ... FOR UPDATE can hang with FLUSH TABLES WITH READ LOCK indefinitely
+#
+
+connect (con1,localhost,root,,);
+connect (con2,localhost,root,,);
+connect (con3,localhost,root,,);
+connect (con4,localhost,root,,);
+connect (con5,localhost,root,,);
+
+create table t1 (a int);
+create table t2 like t1;
+
+connection con1;
+--echo # con1
+lock tables t1 write;
+connection con2;
+--echo # con2
+send flush tables with read lock;
+connection con5;
+--echo # con5
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Flushing tables';
+--source include/wait_show_condition.inc
+--echo # global read lock is taken
+connection con3;
+--echo # con3
+send select * from t2 for update;
+connection con5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Waiting for release of readlock';
+--source include/wait_show_condition.inc
+--echo # waiting for release of read lock
+connection con4;
+--echo # con4
+--echo # would hang and later cause a deadlock
+flush tables t2;
+connection con1;
+--echo # clean up
+unlock tables;
+connection con2;
+--reap
+unlock tables;
+connection con3;
+--reap
+connection default;
+disconnect con5;
+disconnect con4;
+disconnect con3;
+disconnect con2;
+disconnect con1;
+
+drop table t1,t2;
+
+--echo #
+--echo # Lightweight version:
+--echo # Ensure that the wait for a GRL is done before opening tables.
+--echo #
+
+connect (con1,localhost,root,,);
+connect (con2,localhost,root,,);
+
+create table t1 (a int);
+create table t2 like t1;
+
+--echo #
+--echo # UPDATE
+--echo #
+
+connection default;
+--echo # default
+flush tables with read lock;
+connection con1;
+--echo # con1
+send update t2 set a = 1;
+connection default;
+--echo # default
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Waiting for release of readlock';
+--source include/wait_show_condition.inc
+--echo # statement is waiting for release of read lock
+connection con2;
+--echo # con2
+flush table t2;
+connection default;
+--echo # default
+unlock tables;
+connection con1;
+--echo # con1
+--reap
+
+--echo #
+--echo # LOCK TABLES .. WRITE
+--echo #
+
+connection default;
+--echo # default
+flush tables with read lock;
+connection con1;
+--echo # con1
+send lock tables t2 write;
+connection default;
+--echo # default
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Waiting for release of readlock';
+--source include/wait_show_condition.inc
+--echo # statement is waiting for release of read lock
+connection con2;
+--echo # con2
+flush table t2;
+connection default;
+--echo # default
+unlock tables;
+connection con1;
+--echo # con1
+--reap
+unlock tables;
+
+connection default;
+disconnect con2;
+disconnect con1;
+
+drop table t1,t2;
+
+
+--echo End of 5.0 tests
+
+
+#
+# Bug#21281 Pending write lock is incorrectly removed when its
+#           statement being KILLed
+#
+create table t1 (i int);
+connection locker;
+lock table t1 read;
+connection writer;
+send
+update t1 set i= 10;
+connection reader;
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Locked" and info = "update t1 set i= 10";
+--source include/wait_condition.inc
+send
+select * from t1;
+connection default;
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Locked" and info = "select * from t1";
+--source include/wait_condition.inc
+let $ID= `select id from information_schema.processlist where state = "Locked" and info = "update t1 set i= 10"`;
+--replace_result $ID ID
+eval kill query $ID;
+connection reader;
+--reap
+connection writer;
+--error ER_QUERY_INTERRUPTED
+--reap
+connection locker;
+unlock tables;
+connection default;
+drop table t1;
+
+# Disconnect sessions used in many subtests above
+disconnect locker;
+disconnect reader;
+disconnect writer;
+
+#
+# Bug#32395 Alter table under a impending global read lock causes a server crash
+#
+
+#
+# Test ALTER TABLE under LOCK TABLES and FLUSH TABLES WITH READ LOCK
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (i int);
+connect (flush,localhost,root,,test,,);
+connection default;
+--echo connection: default
+lock tables t1 write;
+connection flush;
+--echo connection: flush
+--send flush tables with read lock;
+connection default;
+--echo connection: default
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Flushing tables";
+--source include/wait_condition.inc
+alter table t1 add column j int;
+connect (insert,localhost,root,,test,,);
+connection insert;
+--echo connection: insert
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Flushing tables";
+--source include/wait_condition.inc
+--send insert into t1 values (1,2);
+--echo connection: default
+connection default;
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Waiting for release of readlock";
+--source include/wait_condition.inc
+unlock tables;
+connection flush;
+--echo connection: flush
+--reap
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Waiting for release of readlock";
+--source include/wait_condition.inc
+select * from t1;
+unlock tables;
+connection insert;
+--reap
+connection default;
+let $wait_condition=
+  select count(*) = 1 from t1;
+--source include/wait_condition.inc
+select * from t1;
+drop table t1;
+disconnect flush;
+disconnect insert;
+
+#
+# Test that FLUSH TABLES under LOCK TABLES protects write locked tables
+# from a impending FLUSH TABLES WITH READ LOCK
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (i int);
+connect (flush,localhost,root,,test,,);
+connection default;
+--echo connection: default
+lock tables t1 write;
+connection flush;
+--echo connection: flush
+--send flush tables with read lock;
+connection default;
+--echo connection: default
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Flushing tables";
+--source include/wait_condition.inc
+flush tables;
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Flushing tables";
+--source include/wait_condition.inc
+unlock tables;
+let $wait_condition=
+  select count(*) = 0 from information_schema.processlist
+  where state = "Flushing tables";
+--source include/wait_condition.inc
+connection flush;
+--reap
+connection default;
+disconnect flush;
+drop table t1;
+
+#
+# Bug#30331 Table_locks_waited shows inaccurate values
+#
+
+--disable_warnings
+drop table if exists t1,t2;
+--enable_warnings
+create table t1 (a int);
+flush status;
+lock tables t1 read;
+let $tlwa= `show status like 'Table_locks_waited'`;
+connect (waiter,localhost,root,,);
+connection waiter;
+--send insert into t1 values(1);
+connection default;
+let $wait_condition=
+  select count(*) = 1 from information_schema.processlist
+  where state = "Locked" and info = "insert into t1 values(1)";
+--source include/wait_condition.inc
+let $tlwb= `show status like 'Table_locks_waited'`;
+unlock tables;
+drop table t1;
+disconnect waiter;
+connection default;
 --disable_query_log
+eval SET @tlwa= SUBSTRING_INDEX('$tlwa', '	', -1);
+eval SET @tlwb= SUBSTRING_INDEX('$tlwb', '	', -1);
 drop database pbxt;
 --enable_query_log
-# End of 5.0 tests
+select @tlwa < @tlwb;
+
+--echo End of 5.1 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
 

=== modified file 'mysys/my_sync.c'
--- a/mysys/my_sync.c	2008-04-28 16:24:05 +0000
+++ b/mysys/my_sync.c	2010-01-06 21:27:53 +0000
@@ -100,7 +100,8 @@ static const char cur_dir_name[]= {FN_CU
   RETURN
     0 if ok, !=0 if error
 */
-int my_sync_dir(const char *dir_name, myf my_flags)
+int my_sync_dir(const char *dir_name __attribute__((unused)),
+                myf my_flags __attribute__((unused)))
 {
 #ifdef NEED_EXPLICIT_SYNC_DIR
   DBUG_ENTER("my_sync_dir");
@@ -141,7 +142,8 @@ int my_sync_dir(const char *dir_name, my
   RETURN
     0 if ok, !=0 if error
 */
-int my_sync_dir_by_file(const char *file_name, myf my_flags)
+int my_sync_dir_by_file(const char *file_name __attribute__((unused)),
+                        myf my_flags __attribute__((unused)))
 {
 #ifdef NEED_EXPLICIT_SYNC_DIR
   char dir_name[FN_REFLEN];

=== modified file 'sql/ha_ndbcluster.cc'
--- a/sql/ha_ndbcluster.cc	2009-12-03 11:19:05 +0000
+++ b/sql/ha_ndbcluster.cc	2010-01-06 21:27:53 +0000
@@ -10565,4 +10565,6 @@ mysql_declare_plugin(ndbcluster)
 }
 mysql_declare_plugin_end;
 
+#else
+int Sun_ar_require_a_symbol_here= 0;
 #endif

=== modified file 'storage/archive/azlib.h'
--- a/storage/archive/azlib.h	2009-02-13 16:41:47 +0000
+++ b/storage/archive/azlib.h	2010-01-06 21:27:53 +0000
@@ -33,10 +33,9 @@
   (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
 */
 
-#include <zlib.h>
-
 #include "../../mysys/mysys_priv.h"
 #include <my_dir.h>
+#include <zlib.h>
 
 #ifdef  __cplusplus
 extern "C" {

=== modified file 'storage/maria/ma_blockrec.c'
--- a/storage/maria/ma_blockrec.c	2009-10-03 20:13:58 +0000
+++ b/storage/maria/ma_blockrec.c	2010-01-06 21:27:53 +0000
@@ -6094,7 +6094,7 @@ uint _ma_apply_redo_insert_row_head_or_t
       DBUG_RETURN(0);
     }
 
-    if (((buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) != page_type))
+    if (((uint) (buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) != page_type))
     {
       /*
         This is a page that has been freed before and now should be
@@ -6241,7 +6241,7 @@ uint _ma_apply_redo_purge_row_head_or_ta
       Note that in case the page is not anymore a head or tail page
       a future redo will fix the bitmap.
     */
-    if ((buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) == page_type)
+    if ((uint) (buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) == page_type)
     {
       empty_space= uint2korr(buff+EMPTY_SPACE_OFFSET);
       if (_ma_bitmap_set(info, page, page_type == HEAD_PAGE,

=== modified file 'storage/maria/ma_loghandler.c'
--- a/storage/maria/ma_loghandler.c	2009-05-19 09:28:05 +0000
+++ b/storage/maria/ma_loghandler.c	2010-01-06 21:27:53 +0000
@@ -2823,8 +2823,8 @@ static my_bool translog_page_validator(u
 
   data->was_recovered= 0;
 
-  if (uint3korr(page) != page_no ||
-      uint3korr(page + 3) != data->number)
+  if ((pgcache_page_no_t) uint3korr(page) != page_no ||
+      (uint32) uint3korr(page + 3) != data->number)
   {
     DBUG_PRINT("error", ("Page (%lu,0x%lx): "
                          "page address written in the page is incorrect: "

=== modified file 'storage/maria/ma_test3.c'
--- a/storage/maria/ma_test3.c	2008-01-10 12:21:53 +0000
+++ b/storage/maria/ma_test3.c	2010-01-06 21:27:53 +0000
@@ -180,7 +180,7 @@ void start_test(int id)
   if (pagecacheing && rnd(2) == 0)
     init_pagecache(maria_pagecache, 65536L, 0, 0, MARIA_KEY_BLOCK_LENGTH,
                    MY_WME);
-  printf("Process %d, pid: %d\n",id,getpid()); fflush(stdout);
+  printf("Process %d, pid: %ld\n",id,(long) getpid()); fflush(stdout);
 
   for (error=i=0 ; i < tests && !error; i++)
   {
@@ -362,7 +362,7 @@ int test_write(MARIA_HA *file,int id,int
       maria_extra(file,HA_EXTRA_WRITE_CACHE,0);
   }
 
-  sprintf((char*) record.id,"%7d",getpid());
+  sprintf((char*) record.id,"%7ld", (long) getpid());
   strnmov((char*) record.text,"Testing...", sizeof(record.text));
 
   tries=(uint) rnd(100)+10;

=== modified file 'storage/myisam/mi_test3.c'
--- a/storage/myisam/mi_test3.c	2008-04-28 16:24:05 +0000
+++ b/storage/myisam/mi_test3.c	2010-01-06 21:27:53 +0000
@@ -178,7 +178,8 @@ void start_test(int id)
   }
   if (key_cacheing && rnd(2) == 0)
     init_key_cache(dflt_key_cache, KEY_CACHE_BLOCK_SIZE, 65536L, 0, 0);
-  printf("Process %d, pid: %d\n",id,getpid()); fflush(stdout);
+  printf("Process %d, pid: %ld\n", id, (long) getpid());
+  fflush(stdout);
 
   for (error=i=0 ; i < tests && !error; i++)
   {
@@ -362,7 +363,7 @@ int test_write(MI_INFO *file,int id,int
       mi_extra(file,HA_EXTRA_WRITE_CACHE,0);
   }
 
-  sprintf((char*) record.id,"%7d",getpid());
+  sprintf((char*) record.id,"%7ld",(long) getpid());
   strnmov((char*) record.text,"Testing...", sizeof(record.text));
 
   tries=(uint) rnd(100)+10;

=== modified file 'storage/pbxt/src/ha_pbxt.cc'
--- a/storage/pbxt/src/ha_pbxt.cc	2009-12-29 11:34:44 +0000
+++ b/storage/pbxt/src/ha_pbxt.cc	2010-01-06 21:27:53 +0000
@@ -1294,7 +1294,7 @@ static int pbxt_init(void *p)
 				#6	0x000debe1 in THD::THD at sql_class.cc:631
 				#7	0x00e207a4 in myxt_create_thread at myxt_xt.cc:2666
 				#8	0x00e3134b in tabc_fr_run_thread at tabcache_xt.cc:982
-				#9	0x00e422ca in thr_main at thread_xt.cc:1006
+				#9	0x00e422ca in thr_main_pbxt at thread_xt.cc:1006
 				#10	0x91ff7c55 in _pthread_start
 				#11	0x91ff7b12 in thread_start
 			 *
@@ -1557,7 +1557,7 @@ static int pbxt_prepare(handlerton *hton
 	return err;
 }
 
-static XTThreadPtr ha_temp_open_global_database(handlerton *hton, THD **ret_thd, int *temp_thread, char *thread_name, int *err)
+static XTThreadPtr ha_temp_open_global_database(handlerton *hton, THD **ret_thd, int *temp_thread, const char *thread_name, int *err)
 {
 	THD			*thd;
 	XTThreadPtr	self = NULL;

=== modified file 'storage/pbxt/src/restart_xt.cc'
--- a/storage/pbxt/src/restart_xt.cc	2009-11-27 15:37:02 +0000
+++ b/storage/pbxt/src/restart_xt.cc	2010-01-06 21:27:53 +0000
@@ -3314,7 +3314,7 @@ static void *xn_xres_run_recovery_thread
 	* #7	0x000c0db2 in THD::~THD at sql_class.cc:934
 	* #8	0x003b025b in myxt_destroy_thread at myxt_xt.cc:2999
 	* #9	0x003b66b5 in xn_xres_run_recovery_thread at restart_xt.cc:3196
-	* #10	0x003cbfbb in thr_main at thread_xt.cc:1020
+	* #10	0x003cbfbb in thr_main_pbxt at thread_xt.cc:1020
 	*
 	myxt_destroy_thread(mysql_thread, TRUE);
 	*/

=== modified file 'storage/pbxt/src/thread_xt.cc'
--- a/storage/pbxt/src/thread_xt.cc	2009-12-22 10:33:20 +0000
+++ b/storage/pbxt/src/thread_xt.cc	2010-01-06 21:27:53 +0000
@@ -1013,7 +1013,7 @@ static xtBool thr_setup_signals(void)
 
 typedef void *(*ThreadMainFunc)(XTThreadPtr self);
 
-extern "C" void *thr_main(void *data)
+extern "C" void *thr_main_pbxt(void *data)
 {
 	ThreadDataPtr	td = (ThreadDataPtr) data;
 	XTThreadPtr		self = td->td_thr;
@@ -1503,10 +1503,10 @@ xtPublic pthread_t xt_run_thread(XTThrea
 		pthread_attr_t	attr = { 0, 0, 0 };
 
 		attr.priority = THREAD_PRIORITY_NORMAL;
-		err = pthread_create(&child_thread, &attr, thr_main, &data);
+		err = pthread_create(&child_thread, &attr, thr_main_pbxt, &data);
 	}
 #else
-	err = pthread_create(&child_thread, NULL, thr_main, &data);
+	err = pthread_create(&child_thread, NULL, thr_main_pbxt, &data);
 #endif
 	if (err) {
 		xt_free_thread(child);

=== modified file 'storage/pbxt/src/thread_xt.h'
--- a/storage/pbxt/src/thread_xt.h	2009-11-24 10:55:06 +0000
+++ b/storage/pbxt/src/thread_xt.h	2010-01-06 21:27:53 +0000
@@ -536,7 +536,7 @@ extern struct XTThread	**xt_thr_array;
  * Function prototypes
  */
 
-extern "C" void *thr_main(void *data);
+extern "C" void *thr_main_pbxt(void *data);
 
 void			xt_get_now(char *buffer, size_t len);
 xtBool			xt_init_logging(void);

=== modified file 'storage/xtradb/srv/srv0srv.c'
--- a/storage/xtradb/srv/srv0srv.c	2009-11-13 21:26:08 +0000
+++ b/storage/xtradb/srv/srv0srv.c	2010-01-06 21:27:53 +0000
@@ -81,6 +81,7 @@ Created 10/8/1995 Heikki Tuuri
 #include "ut0mem.h"
 #include "ut0ut.h"
 #include "os0proc.h"
+#include "os0sync.h"
 #include "mem0mem.h"
 #include "mem0pool.h"
 #include "sync0sync.h"
@@ -1102,12 +1103,12 @@ srv_conc_enter_innodb_timer_based(trx_t*
 	}
 retry:
 	if (srv_conc_n_threads < (lint) srv_thread_concurrency) {
-		conc_n_threads = __sync_add_and_fetch(&srv_conc_n_threads, 1);
+		conc_n_threads = os_atomic_increment_lint(&srv_conc_n_threads, 1);
 		if (conc_n_threads <= (lint) srv_thread_concurrency) {
 			enter_innodb_with_tickets(trx);
 			return;
 		}
-		__sync_add_and_fetch(&srv_conc_n_threads, -1);
+		os_atomic_increment_lint(&srv_conc_n_threads, -1);
 	}
 	if (!has_yielded)
 	{
@@ -1118,7 +1119,7 @@ retry:
 	if (trx->has_search_latch
 	    || NULL != UT_LIST_GET_FIRST(trx->trx_locks)) {
 
-		conc_n_threads = __sync_add_and_fetch(&srv_conc_n_threads, 1);
+		conc_n_threads = os_atomic_increment_lint(&srv_conc_n_threads, 1);
 		enter_innodb_with_tickets(trx);
 		return;
 	}
@@ -1129,7 +1130,7 @@ retry:
 		trx->op_info = "";
 		has_slept++;
 	}
-	conc_n_threads = __sync_add_and_fetch(&srv_conc_n_threads, 1);
+	conc_n_threads = os_atomic_increment_lint(&srv_conc_n_threads, 1);
 	enter_innodb_with_tickets(trx);
 	return;
 }
@@ -1137,7 +1138,7 @@ retry:
 static void
 srv_conc_exit_innodb_timer_based(trx_t* trx)
 {
-	__sync_add_and_fetch(&srv_conc_n_threads, -1);
+	os_atomic_increment_lint(&srv_conc_n_threads, -1);
 	trx->declared_to_be_inside_innodb = FALSE;
 	trx->n_tickets_to_enter_innodb = 0;
 	return;
@@ -1326,7 +1327,7 @@ srv_conc_force_enter_innodb(
 	ut_ad(srv_conc_n_threads >= 0);
 #ifdef INNODB_RW_LOCKS_USE_ATOMICS
 	if (srv_thread_concurrency_timer_based) {
-		__sync_add_and_fetch(&srv_conc_n_threads, 1);
+		os_atomic_increment_lint(&srv_conc_n_threads, 1);
 		trx->declared_to_be_inside_innodb = TRUE;
 		trx->n_tickets_to_enter_innodb = 1;
 		return;

=== modified file 'support-files/compiler_warnings.supp'
--- a/support-files/compiler_warnings.supp	2009-10-03 20:13:58 +0000
+++ b/support-files/compiler_warnings.supp	2010-01-06 21:27:53 +0000
@@ -88,6 +88,9 @@ storage/maria/ma_pagecache.c: .*'info_ch
 #
 storage/pbxt/ : typedef.*was ignored in this declaration
 
+#
+# Yassl
+include/runtime.hpp: .*pure_error.*
 
 #
 # Groff warnings on OpenSUSE.




Follow ups