Commit 8169f210 authored by unknown's avatar unknown

Merge aivanov@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl

into  mysql.com:/home/alexi/bugs/mysql-5.0-19208

parents c68cc392 39defccf
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
Optimization="0" Optimization="0"
OptimizeForProcessor="2" OptimizeForProcessor="2"
AdditionalIncludeDirectories="../include,../zlib" AdditionalIncludeDirectories="../include,../zlib"
PreprocessorDefinitions="_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;USE_SYMDIR" PreprocessorDefinitions="__NT__;_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;USE_SYMDIR"
RuntimeLibrary="1" RuntimeLibrary="1"
PrecompiledHeaderFile=".\debug/mysys.pch" PrecompiledHeaderFile=".\debug/mysys.pch"
AssemblerListingLocation=".\debug/" AssemblerListingLocation=".\debug/"
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
InlineFunctionExpansion="1" InlineFunctionExpansion="1"
OptimizeForProcessor="2" OptimizeForProcessor="2"
AdditionalIncludeDirectories="../include,../zlib" AdditionalIncludeDirectories="../include,../zlib"
PreprocessorDefinitions="USE_SYMDIR;NDEBUG;DBUG_OFF;_WINDOWS" PreprocessorDefinitions="__NT__;USE_SYMDIR;NDEBUG;DBUG_OFF;_WINDOWS"
StringPooling="TRUE" StringPooling="TRUE"
RuntimeLibrary="0" RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE" EnableFunctionLevelLinking="TRUE"
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
InlineFunctionExpansion="1" InlineFunctionExpansion="1"
OptimizeForProcessor="2" OptimizeForProcessor="2"
AdditionalIncludeDirectories="../include,../zlib" AdditionalIncludeDirectories="../include,../zlib"
PreprocessorDefinitions="DBUG_OFF;_WINDOWS;NDEBUG" PreprocessorDefinitions="__NT__;DBUG_OFF;_WINDOWS;NDEBUG"
StringPooling="TRUE" StringPooling="TRUE"
RuntimeLibrary="0" RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE" EnableFunctionLevelLinking="TRUE"
...@@ -170,7 +170,7 @@ ...@@ -170,7 +170,7 @@
Optimization="0" Optimization="0"
OptimizeForProcessor="2" OptimizeForProcessor="2"
AdditionalIncludeDirectories="../include,../zlib" AdditionalIncludeDirectories="../include,../zlib"
PreprocessorDefinitions="_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;USE_SYMDIR;USE_TLS" PreprocessorDefinitions="__NT__;_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;USE_SYMDIR;USE_TLS"
RuntimeLibrary="1" RuntimeLibrary="1"
PrecompiledHeaderFile=".\mysys___Win32_TLS_DEBUG/mysys.pch" PrecompiledHeaderFile=".\mysys___Win32_TLS_DEBUG/mysys.pch"
AssemblerListingLocation=".\mysys___Win32_TLS_DEBUG/" AssemblerListingLocation=".\mysys___Win32_TLS_DEBUG/"
...@@ -219,7 +219,7 @@ ...@@ -219,7 +219,7 @@
InlineFunctionExpansion="1" InlineFunctionExpansion="1"
OptimizeForProcessor="2" OptimizeForProcessor="2"
AdditionalIncludeDirectories="../include,../zlib" AdditionalIncludeDirectories="../include,../zlib"
PreprocessorDefinitions="DBUG_OFF;_WINDOWS;NDEBUG;USE_TLS" PreprocessorDefinitions="__NT__;DBUG_OFF;_WINDOWS;NDEBUG;USE_TLS"
StringPooling="TRUE" StringPooling="TRUE"
RuntimeLibrary="0" RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE" EnableFunctionLevelLinking="TRUE"
......
...@@ -541,6 +541,7 @@ typedef int (*Process_option_func)(void *ctx, const char *group_name, ...@@ -541,6 +541,7 @@ typedef int (*Process_option_func)(void *ctx, const char *group_name,
#include <my_alloc.h> #include <my_alloc.h>
/* Prototypes for mysys and my_func functions */ /* Prototypes for mysys and my_func functions */
extern int my_copy(const char *from,const char *to,myf MyFlags); extern int my_copy(const char *from,const char *to,myf MyFlags);
...@@ -613,6 +614,13 @@ extern File my_sopen(const char *path, int oflag, int shflag, int pmode); ...@@ -613,6 +614,13 @@ extern File my_sopen(const char *path, int oflag, int shflag, int pmode);
#endif #endif
extern int check_if_legal_filename(const char *path); extern int check_if_legal_filename(const char *path);
#if defined(__WIN__) && defined(__NT__)
extern int nt_share_delete(const char *name,myf MyFlags);
#define my_delete_allow_opened(fname,flags) nt_share_delete((fname),(flags))
#else
#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags))
#endif
#ifndef TERMINATE #ifndef TERMINATE
extern void TERMINATE(FILE *file); extern void TERMINATE(FILE *file);
#endif #endif
......
...@@ -32,3 +32,54 @@ int my_delete(const char *name, myf MyFlags) ...@@ -32,3 +32,54 @@ int my_delete(const char *name, myf MyFlags)
} }
DBUG_RETURN(err); DBUG_RETURN(err);
} /* my_delete */ } /* my_delete */
#if defined(__WIN__) && defined(__NT__)
/*
Delete file which is possibly not closed.
This function is intended to be used exclusively as a temporal solution
for Win NT in case when it is needed to delete a not closed file (note
that the file must be opened everywhere with FILE_SHARE_DELETE mode).
Deleting not-closed files can not be supported on Win 98|ME (and because
of that is considered harmful).
The function deletes the file with its preliminary renaming. This is
because when not-closed share-delete file is deleted it still lives on
a disk until it will not be closed everwhere. This may conflict with an
attempt to create a new file with the same name. The deleted file is
renamed to <name>.<num>.deleted where <name> - the initial name of the
file, <num> - a hexadecimal number chosen to make the temporal name to
be unique.
*/
int nt_share_delete(const char *name, myf MyFlags)
{
char buf[MAX_PATH + 20];
ulong cnt;
DBUG_ENTER("nt_share_delete");
DBUG_PRINT("my",("name %s MyFlags %d", name, MyFlags));
for (cnt= GetTickCount(); cnt; cnt--)
{
sprintf(buf, "%s.%08X.deleted", name, cnt);
if (MoveFile(name, buf))
break;
if ((errno= GetLastError()) == ERROR_ALREADY_EXISTS)
continue;
DBUG_PRINT("warning", ("Failed to rename %s to %s, errno: %d",
name, buf, errno));
break;
}
if (DeleteFile(buf))
DBUG_RETURN(0);
my_errno= GetLastError();
if (MyFlags & (MY_FAE+MY_WME))
my_error(EE_DELETE, MYF(ME_BELL + ME_WAITTANG + (MyFlags & ME_NOINPUT)),
name, my_errno);
DBUG_RETURN(-1);
}
#endif
...@@ -959,14 +959,14 @@ bool MYSQL_LOG::reset_logs(THD* thd) ...@@ -959,14 +959,14 @@ bool MYSQL_LOG::reset_logs(THD* thd)
for (;;) for (;;)
{ {
my_delete(linfo.log_file_name, MYF(MY_WME)); my_delete_allow_opened(linfo.log_file_name, MYF(MY_WME));
if (find_next_log(&linfo, 0)) if (find_next_log(&linfo, 0))
break; break;
} }
/* Start logging with a new file */ /* Start logging with a new file */
close(LOG_CLOSE_INDEX); close(LOG_CLOSE_INDEX);
my_delete(index_file_name, MYF(MY_WME)); // Reset (open will update) my_delete_allow_opened(index_file_name, MYF(MY_WME)); // Reset (open will update)
if (!thd->slave_thread) if (!thd->slave_thread)
need_start_event=1; need_start_event=1;
if (!open_index_file(index_file_name, 0)) if (!open_index_file(index_file_name, 0))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment