List:Commits« Previous MessageNext Message »
From:Sergey Vojtovich Date:May 18 2011 10:01am
Subject:bzr commit into mysql-5.1 branch (sergey.vojtovich:3622) Bug#12402794
View as plain text  
#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#12402794Sergey Vojtovich19 May