From: Sergey Vojtovich Date: June 3 2011 7:31am Subject: bzr commit into mysql-5.1 branch (sergey.vojtovich:3635) List-Archive: http://lists.mysql.com/commits/138620 Message-Id: <201106030731.p537VVYK024598@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///home/svoj/mysql/server/mysql-5.1-push/ based on revid:davi.arnaut@stripped 3635 Sergey Vojtovich 2011-06-03 [merge] Merge. added: mysql-test/r/archive_debug.result mysql-test/t/archive_debug.test modified: storage/archive/azio.c storage/archive/ha_archive.cc === added file 'mysql-test/r/archive_debug.result' --- a/mysql-test/r/archive_debug.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/archive_debug.result 2011-05-18 10:01:43 +0000 @@ -0,0 +1,12 @@ +# +# BUG#12402794 - 60976: CRASH, VALGRIND WARNING AND MEMORY LEAK +# WITH PARTITIONED ARCHIVE TABLES +# +CREATE TABLE t1(a INT) ENGINE=ARCHIVE; +INSERT INTO t1 VALUES(1); +SET SESSION debug='d,simulate_archive_open_failure'; +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check error Corrupt +SET SESSION debug=DEFAULT; +DROP TABLE t1; === added file 'mysql-test/t/archive_debug.test' --- a/mysql-test/t/archive_debug.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/archive_debug.test 2011-05-18 10:01:43 +0000 @@ -0,0 +1,13 @@ +--source include/have_archive.inc +--source include/have_debug.inc + +--echo # +--echo # BUG#12402794 - 60976: CRASH, VALGRIND WARNING AND MEMORY LEAK +--echo # WITH PARTITIONED ARCHIVE TABLES +--echo # +CREATE TABLE t1(a INT) ENGINE=ARCHIVE; +INSERT INTO t1 VALUES(1); +SET SESSION debug='d,simulate_archive_open_failure'; +CHECK TABLE t1; +SET SESSION debug=DEFAULT; +DROP TABLE t1; === modified file 'storage/archive/azio.c' --- a/storage/archive/azio.c 2009-11-17 12:14:27 +0000 +++ b/storage/archive/azio.c 2011-05-18 10:01:43 +0000 @@ -114,6 +114,15 @@ int az_open (azio_stream *s, const char errno = 0; s->file = fd < 0 ? my_open(path, Flags, MYF(0)) : fd; + DBUG_EXECUTE_IF("simulate_archive_open_failure", + { + if (s->file >= 0) + { + my_close(s->file, MYF(0)); + s->file= -1; + my_errno= EMFILE; + } + }); if (s->file < 0 ) { === modified file 'storage/archive/ha_archive.cc' --- a/storage/archive/ha_archive.cc 2011-05-06 08:03:02 +0000 +++ b/storage/archive/ha_archive.cc 2011-05-18 10:01:43 +0000 @@ -1586,11 +1586,12 @@ int ha_archive::check(THD* thd, HA_CHECK azflush(&(share->archive_write), Z_SYNC_FLUSH); pthread_mutex_unlock(&share->mutex); + if (init_archive_reader()) + DBUG_RETURN(HA_ADMIN_CORRUPT); /* Now we will rewind the archive file so that we are positioned at the start of the file. */ - init_archive_reader(); read_data_header(&archive); while (!(rc= get_row(&archive, table->record[0]))) count--; No bundle (reason: revision is a merge (you can force generation of a bundle with env var BZR_FORCE_BUNDLE=1)).