diff options
author | Sergei Golubchik <serg@mariadb.org> | 2017-02-20 11:07:38 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2017-02-27 12:35:10 +0100 |
commit | 93cb0246b8c883c4f5010468892986fa1d5ba379 (patch) | |
tree | ae01658f5e51087c2597eff5a51428d6773cec52 /storage/myisam/mi_delete_table.c | |
parent | 6d50324558e79d6e90848059bf7cd918685b02ba (diff) | |
download | mariadb-git-93cb0246b8c883c4f5010468892986fa1d5ba379.tar.gz |
race-condition safe implementation of mi_delete_table/maria_delete_table
Diffstat (limited to 'storage/myisam/mi_delete_table.c')
-rw-r--r-- | storage/myisam/mi_delete_table.c | 34 |
1 files changed, 3 insertions, 31 deletions
diff --git a/storage/myisam/mi_delete_table.c b/storage/myisam/mi_delete_table.c index 7643c093e86..ebedfbda343 100644 --- a/storage/myisam/mi_delete_table.c +++ b/storage/myisam/mi_delete_table.c @@ -22,42 +22,14 @@ int mi_delete_table(const char *name) { - char from[FN_REFLEN]; DBUG_ENTER("mi_delete_table"); #ifdef EXTRA_DEBUG check_table_is_closed(name,"delete"); #endif - fn_format(from,name,"",MI_NAME_IEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT); - if (my_is_symlink(from) && mysys_test_invalid_symlink(from)) - { - /* - Symlink is pointing to file in data directory. - Remove symlink, keep file. - */ - if (mysql_file_delete(mi_key_file_kfile, from, MYF(MY_WME))) - DBUG_RETURN(my_errno); - } - else - { - if (mysql_file_delete_with_symlink(mi_key_file_kfile, from, MYF(MY_WME))) - DBUG_RETURN(my_errno); - } - fn_format(from,name,"",MI_NAME_DEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT); - if (my_is_symlink(from) && mysys_test_invalid_symlink(from)) - { - /* - Symlink is pointing to file in data directory. - Remove symlink, keep file. - */ - if (mysql_file_delete(mi_key_file_dfile, from, MYF(MY_WME))) - DBUG_RETURN(my_errno); - } - else - { - if (mysql_file_delete_with_symlink(mi_key_file_dfile, from, MYF(MY_WME))) - DBUG_RETURN(my_errno); - } + if (my_handler_delete_with_symlink(mi_key_file_kfile, name, MI_NAME_IEXT, 0) || + my_handler_delete_with_symlink(mi_key_file_dfile, name, MI_NAME_DEXT, 0)) + DBUG_RETURN(my_errno); DBUG_RETURN(0); } |