Browse Source

Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE

corrupts a MERGE table

Post-pushbuild fix. The merge test failed on Windows.
The MoveFile() function returned the error code
ERROR_ACCESS_DENIED.

The fix is to use a different name for the file to be
deleted. This is the same trick as we use for the error
code ERROR_ALREADY_EXISTS.

Added ERROR_ACCESS_DENIED to the list of error codes that
require to change the name of the file to be deleted.
pull/73/head
istruewing@stella.local 18 years ago
parent
commit
3be8cf8f3d
  1. 10
      mysys/my_delete.c

10
mysys/my_delete.c

@ -56,16 +56,20 @@ int nt_share_delete(const char *name, myf MyFlags)
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;
/* This happened during tests with MERGE tables. */
if (errno == ERROR_ACCESS_DENIED)
continue;
DBUG_PRINT("warning", ("Failed to rename %s to %s, errno: %d",
name, buf, errno));
break;

Loading…
Cancel
Save