Bug #16155 | TRUNCATE TABLE crashes mysqld | ||
---|---|---|---|
Submitted: | 3 Jan 2006 15:47 | Modified: | 6 Jan 2006 16:11 |
Reporter: | Kristian Nielsen | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S1 (Critical) |
Version: | Lastest 5.1-new bitkeeper | OS: | IBM AIX (AIX 5.2 (64 bit)) |
Assigned to: | Kristian Nielsen | CPU Architecture: | Any |
[3 Jan 2006 15:47]
Kristian Nielsen
[6 Jan 2006 14:29]
Kristian Nielsen
A trace from the crash: T@3 : | | | >mysql_truncate T@3 : | | | | >unpack_filename T@3 : | | | | | >dirname_part T@3 : | | | | | | enter: './test/kntest.frm' T@3 : | | | | | | >convert_dirname T@3 : | | | | | | <convert_dirname T@3 : | | | | | <dirname_part T@3 : | | | | | >unpack_dirname T@3 : | | | | | | >dirname_part T@3 : | | | | | | | enter: './test/' T@3 : | | | | | | | >convert_dirname T@3 : | | | | | | | <convert_dirname T@3 : | | | | | | <dirname_part T@3 : | | | | | | >cleanup_dirname T@3 : | | | | | | | enter: from: './test/' T@3 : | | | | | | | exit: to: './test/' T@3 : | | | | | | <cleanup_dirname T@3 : | | | | | <unpack_dirname T@3 : | | | | <unpack_filename T@3 : | | | | >mysql_frm_type T@3 : | | | | | >my_open T@3 : | | | | | | my: Name: './test/kntest.frm' Flags: 0 MyFlags: 0 T@3 : | | | | | <my_open T@3 : | | | | | >my_malloc T@3 : | | | | | | my: size: 18 my_flags: 0 T@3 : | | | | | | exit: ptr: 0x111e18eb0 T@3 : | | | | | <my_malloc T@3 : | | | | | exit: fd: 28 T@3 : | | | | | >my_read T@3 : | | | | | | my: Fd: 28 Buffer: 0x111ea2464 Count: 10 MyFlags: 20 T@3 : | | | | | <my_read T@3 : | | | | | >my_close T@3 : | | | | | | my: fd: 28 MyFlags: 16 T@3 : | | | | | | >my_free T@3 : | | | | | | | my: ptr: 0x111e18eb0 T@3 : | | | | | | <my_free T@3 : | | | | | <my_close T@3 : | | | | <mysql_frm_type T@3 : | | | | >mysql_uninstall_plugin T@3 : | | | | <mysql_uninstall_plugin T@3 : | | | | >lock_and_wait_for_table_name T@3 : | | | | | >wait_if_global_read_lock T@3 : | | | | | <wait_if_global_read_lock T@3 : | | | | | >lock_table_name T@3 : | | | | | | enter: db: test name: kntest T@3 : | | | | | | >hash_search T@3 : | | | | | | <hash_search T@3 : | | | | | | >my_malloc T@3 : | | | | | | | my: size: 2564 my_flags: 48 T@3 : | | | | | | | exit: ptr: 0x111e195d0 T@3 : | | | | | | <my_malloc T@3 : | | | | | <lock_table_name T@3 : | | | | | >remove_table_from_cache T@3 : | | | | | | >hash_search T@3 : | | | | | | | exit: found key at 1 T@3 : | | | | | | <hash_search T@3 : | | | | | | info: Table was in use by current thread. db_stat: 0 T@3 : | | | | | | info: Removing table from table_def_cache T@3 : | | | | | | >hash_search T@3 : | | | | | | <hash_search T@3 : | | | | | <remove_table_from_cache T@3 : | | | | | >start_waiting_global_read_lock T@3 : | | | | | <start_waiting_global_read_lock T@3 : | | | | <lock_and_wait_for_table_name
[6 Jan 2006 15:27]
Kristian Nielsen
Hm, I found the cause of this. It crashes in sql/sql_delete.cc line 893: *(path + path_length - reg_ext_length)= '\0'; The crash can be reproduced by this small program: #include <string.h> #include <stdio.h> int main(int argc, char *argv) { char path[255]; unsigned int path_length, reg_ext_length; strcpy(path, "./test/kntest.frm"); path_length = 17; reg_ext_length = 4; *(path + path_length - reg_ext_length)= '\0'; fprintf(stderr, "path='%s'\n", path); } Compile with "xlC_r -g -q64 test.cc" and it crashes. Compile with "xlC_r -g test.cc" and it works ok... Looks like a compiler bug then. A workaround is to change the offending line to this (both in test program and mysqld): path[path_length - reg_ext_length]= '\0'; Maybe we should do this?
[6 Jan 2006 16:06]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/706
[6 Jan 2006 16:11]
Kristian Nielsen
Fixed in 5.1.5. Not in any released version, so nothing to document.