3708 Marko Mäkelä 2011-02-15
Bug#59307 Valgrind: uninitialized value in rw_lock_set_writer_id_and_recursion_flag()
rw_lock_create_func(): Initialize lock->writer_thread, so that Valgrind
will not complain even when Valgrind instrumentation is not enabled.
Flag lock->writer_thread uninitialized, so that Valgrind can complain
when it is used uninitialized.
rw_lock_set_writer_id_and_recursion_flag(): Revert the bogus Valgrind
instrumentation that was pushed in the first attempt to fix this bug.
added:
mysql-test/suite/innodb_plugin/r/innodb_bug59307.result
mysql-test/suite/innodb_plugin/t/innodb_bug59307.test
modified:
storage/innodb_plugin/ChangeLog
storage/innodb_plugin/include/sync0rw.ic
storage/innodb_plugin/sync/sync0rw.c
3707 Jimmy Yang 2011-02-14
Fix Bug #59749 Enabling concurrent reads while creating non-primary unique
index gives failures.
Approved by Marko
modified:
storage/innodb_plugin/ChangeLog
storage/innodb_plugin/handler/handler0alter.cc
=== added file 'mysql-test/suite/innodb_plugin/r/innodb_bug59307.result'
--- a/mysql-test/suite/innodb_plugin/r/innodb_bug59307.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/innodb_plugin/r/innodb_bug59307.result revid:marko.makela@stripped85133-tw1sqyvxzhaw04eu
@@ -0,0 +1,28 @@
+CREATE TABLE t1 (
+t1_int INT,
+t1_time TIME
+) ENGINE=innodb;
+CREATE TABLE t2 (
+t2_int int PRIMARY KEY,
+t2_int2 INT
+) ENGINE=INNODB;
+INSERT INTO t2 VALUES ();
+Warnings:
+Warning 1364 Field 't2_int' doesn't have a default value
+INSERT INTO t1 VALUES ();
+SELECT *
+FROM t1 AS t1a
+WHERE NOT EXISTS
+(SELECT *
+FROM t1 AS t1b
+WHERE t1b.t1_int NOT IN
+(SELECT t2.t2_int
+FROM t2
+WHERE t1b.t1_time LIKE t1b.t1_int
+OR t1b.t1_time <> t2.t2_int2
+AND 6=7
+)
+)
+;
+t1_int t1_time
+DROP TABLE t1,t2;
=== added file 'mysql-test/suite/innodb_plugin/t/innodb_bug59307.test'
--- a/mysql-test/suite/innodb_plugin/t/innodb_bug59307.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/innodb_plugin/t/innodb_bug59307.test revid:marko.makela@stripped15085133-tw1sqyvxzhaw04eu
@@ -0,0 +1,32 @@
+-- source include/have_innodb_plugin.inc
+# Bug #59307 uninitialized value in rw_lock_set_writer_id_and_recursion_flag()
+# when Valgrind instrumentation (UNIV_DEBUG_VALGRIND) is not enabled
+
+CREATE TABLE t1 (
+ t1_int INT,
+ t1_time TIME
+) ENGINE=innodb;
+
+CREATE TABLE t2 (
+ t2_int int PRIMARY KEY,
+ t2_int2 INT
+) ENGINE=INNODB;
+
+INSERT INTO t2 VALUES ();
+INSERT INTO t1 VALUES ();
+
+SELECT *
+FROM t1 AS t1a
+WHERE NOT EXISTS
+ (SELECT *
+ FROM t1 AS t1b
+ WHERE t1b.t1_int NOT IN
+ (SELECT t2.t2_int
+ FROM t2
+ WHERE t1b.t1_time LIKE t1b.t1_int
+ OR t1b.t1_time <> t2.t2_int2
+ AND 6=7
+ )
+)
+;
+DROP TABLE t1,t2;
=== modified file 'storage/innodb_plugin/ChangeLog'
--- a/storage/innodb_plugin/ChangeLog revid:jimmy.yang@strippedagu
+++ b/storage/innodb_plugin/ChangeLog revid:marko.makela@stripped
@@ -1,3 +1,9 @@
+2011-02-15 The InnoDB Team
+
+ * sync/sync0rw.c, innodb_bug59307.test:
+ Bug#59307 Valgrind: uninitialized value in
+ rw_lock_set_writer_id_and_recursion_flag()
+
2011-02-14 The InnoDB Team
* handler/handler0alter.cc:
=== modified file 'storage/innodb_plugin/include/sync0rw.ic'
--- a/storage/innodb_plugin/include/sync0rw.ic revid:jimmy.yang@stripped
+++ b/storage/innodb_plugin/include/sync0rw.ic revid:marko.makela@stripped
@@ -280,7 +280,6 @@ rw_lock_set_writer_id_and_recursion_flag
local_thread = lock->writer_thread;
success = os_compare_and_swap_thread_id(
&lock->writer_thread, local_thread, curr_thread);
- UNIV_MEM_VALID(&success, sizeof(success));
ut_a(success);
lock->recursive = recursive;
=== modified file 'storage/innodb_plugin/sync/sync0rw.c'
--- a/storage/innodb_plugin/sync/sync0rw.c revid:jimmy.yang@stripped
+++ b/storage/innodb_plugin/sync/sync0rw.c revid:marko.makela@oracle.com-20110215085133-tw1sqyvxzhaw04eu
@@ -260,6 +260,9 @@ rw_lock_create_func(
contains garbage at initialization and cannot be used for
recursive x-locking. */
lock->recursive = FALSE;
+ /* Silence Valgrind when UNIV_DEBUG_VALGRIND is not enabled. */
+ memset((void*) &lock->writer_thread, 0, sizeof lock->writer_thread);
+ UNIV_MEM_INVALID(&lock->writer_thread, sizeof lock->writer_thread);
#ifdef UNIV_SYNC_DEBUG
UT_LIST_INIT(lock->debug_list);
Attachment: [text/bzr-bundle] bzr/marko.makela@oracle.com-20110215085133-tw1sqyvxzhaw04eu.bundle
| Thread |
|---|
| • bzr push into mysql-5.1-innodb branch (marko.makela:3707 to 3708) Bug#59307 | marko.makela | 15 Feb |