#At file:///home/svoj/mysql/server/mysql-5.1-bug60976/ based on revid:vinay.fisrekar@stripped
3622 Sergey Vojtovich 2011-05-18
BUG#12402794 - 60976: CRASH, VALGRIND WARNING AND MEMORY
LEAK WITH PARTITIONED ARCHIVE TABLES
CHECK TABLE against archive table, when file descriptors
are exhausted, caused server crash.
Archive didn't handle errors when opening data file for
CHECK TABLE.
@ mysql-test/r/archive_debug.result
A test case for BUG#12402794.
@ mysql-test/t/archive_debug.test
A test case for BUG#12402794.
@ storage/archive/azio.c
A test case for BUG#12402794.
@ storage/archive/ha_archive.cc
Handle init_archive_reader() failure.
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--;
Attachment: [text/bzr-bundle] bzr/sergey.vojtovich@oracle.com-20110518100143-mdou0p7ajszmj2lt.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1 branch (sergey.vojtovich:3622) Bug#12402794 | Sergey Vojtovich | 19 May |