summaryrefslogtreecommitdiff
path: root/storage/myisam/mi_delete_table.c
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-02-20 11:07:38 +0100
committerSergei Golubchik <serg@mariadb.org>2017-02-27 12:35:10 +0100
commit93cb0246b8c883c4f5010468892986fa1d5ba379 (patch)
treeae01658f5e51087c2597eff5a51428d6773cec52 /storage/myisam/mi_delete_table.c
parent6d50324558e79d6e90848059bf7cd918685b02ba (diff)
downloadmariadb-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.c34
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);
}