#At file:///home/gluh/MySQL/mysql-5.1-bug-41441/ based on revid:sergey.glukhov@stripped
2754 Sergey Glukhov 2008-12-26
Bug#41441 repair csv table crashes debug server(for 5.1 only)
The problem: data file can not be deleted on win because
there is another opened instance of this file.
Data file might be opened twice, on table opening stage and
during write_row execution. We need to close both instances
to satisfy Win. The fix is only for 5.1, In 6.0 we have
naitive win set of functions, so the fix will be different
there.
modified:
mysql-test/r/csv.result
mysql-test/t/csv.test
storage/csv/ha_tina.cc
per-file messages:
mysql-test/r/csv.result
test result
mysql-test/t/csv.test
test case
storage/csv/ha_tina.cc
The problem: data file can not be deleted on win because
there is another opened instance of this file.
Data file might be opened twice, on table opening stage and
during write_row execution. We need to close both instances
to satisfy Win. The fix is only for 5.1, In 6.0 we have
naitive win set of functions, so the fix will be different
there.
=== modified file 'mysql-test/r/csv.result'
--- a/mysql-test/r/csv.result 2008-12-10 09:05:18 +0000
+++ b/mysql-test/r/csv.result 2008-12-26 11:34:20 +0000
@@ -5394,4 +5394,17 @@ select * from t1;
ERROR HY000: File './test/t1.CSV' not found (Errcode: 2)
unlock tables;
drop table t1;
+create table t1(a enum ('a') not null) engine=csv;
+insert into t1 values (2);
+Warnings:
+Warning 1265 Data truncated for column 'a' at row 1
+select * from t1 limit 1;
+ERROR HY000: Table 't1' is marked as crashed and should be repaired
+repair table t1;
+Table Op Msg_type Msg_text
+test.t1 repair Warning Data truncated for column 'a' at row 1
+test.t1 repair status OK
+select * from t1 limit 1;
+a
+drop table t1;
End of 5.1 tests
=== modified file 'mysql-test/t/csv.test'
--- a/mysql-test/t/csv.test 2008-12-10 09:05:18 +0000
+++ b/mysql-test/t/csv.test 2008-12-26 11:34:20 +0000
@@ -1804,4 +1804,17 @@ unlock tables;
drop table t1;
--disconnect con1
+#
+# Bug#41441 repair csv table crashes debug server
+#
+# Note: The test should be removed after Bug#33717 is fixed
+
+create table t1(a enum ('a') not null) engine=csv;
+insert into t1 values (2);
+--error 1194
+select * from t1 limit 1;
+repair table t1;
+select * from t1 limit 1;
+drop table t1;
+
--echo End of 5.1 tests
=== modified file 'storage/csv/ha_tina.cc'
--- a/storage/csv/ha_tina.cc 2008-12-10 09:05:18 +0000
+++ b/storage/csv/ha_tina.cc 2008-12-26 11:34:20 +0000
@@ -1439,6 +1439,17 @@ int ha_tina::repair(THD* thd, HA_CHECK_O
a file, which descriptor is still open. EACCES will be returned
when trying to delete the "to"-file in my_rename().
*/
+ if (share->tina_write_opened)
+ {
+ /*
+ Data file might be opened twice, on table opening stage and
+ during write_row execution. We need to close both instances
+ to satisfy Win.
+ */
+ if(my_close(share->tina_write_filedes, MYF(0)))
+ DBUG_RETURN(my_errno ? my_errno : -1);
+ share->tina_write_opened= FALSE;
+ }
if (my_close(data_file,MYF(0)) || my_close(repair_file, MYF(0)) ||
my_rename(repaired_fname, share->data_file_name, MYF(0)))
DBUG_RETURN(-1);