Commit 0bb0230e authored by Jan Lindström's avatar Jan Lindström

MDEV-6426: Maria DB crashes randomly on creating indexes

Improve OS error messages on Windows.
parent dd1d9212
......@@ -2846,6 +2846,7 @@ os_file_write_func(
DWORD high;
ulint n_retries = 0;
ulint err;
DWORD saved_error = 0;
#ifndef UNIV_HOTBACKUP
ulint i;
#endif /* !UNIV_HOTBACKUP */
......@@ -2935,8 +2936,10 @@ retry:
}
if (!os_has_said_disk_full) {
char *winmsg = NULL;
err = (ulint) GetLastError();
saved_error = GetLastError();
err = (ulint) saved_error;
ut_print_timestamp(stderr);
......@@ -2953,6 +2956,23 @@ retry:
name, offset,
(ulong) n, (ulong) len, (ulong) err);
/* Ask Windows to prepare a standard message for a
GetLastError() */
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, saved_error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&winmsg, 0, NULL);
if (winmsg) {
fprintf(stderr,
"InnoDB: FormatMessage: Error number %lu means '%s'.\n",
(ulong) saved_error, winmsg);
LocalFree(winmsg);
}
if (strerror((int) err) != NULL) {
fprintf(stderr,
"InnoDB: Error number %lu means '%s'.\n",
......@@ -2980,7 +3000,6 @@ retry:
}
if (!os_has_said_disk_full) {
ut_print_timestamp(stderr);
fprintf(stderr,
......
......@@ -3049,7 +3049,8 @@ os_file_write_func(
DWORD len;
ulint n_retries = 0;
ulint err;
OVERLAPPED overlapped;
OVERLAPPED overlapped;
DWORD saved_error = 0;
/* On 64-bit Windows, ulint is 64 bits. But offset and n should be
no more than 32 bits. */
......@@ -3076,7 +3077,7 @@ retry:
if (ret) {
ret = GetOverlappedResult(file, &overlapped, (DWORD *)&len, FALSE);
}
else if(GetLastError() == ERROR_IO_PENDING) {
else if ( GetLastError() == ERROR_IO_PENDING) {
ret = GetOverlappedResult(file, &overlapped, (DWORD *)&len, TRUE);
}
......@@ -3104,8 +3105,10 @@ retry:
}
if (!os_has_said_disk_full) {
char *winmsg = NULL;
err = (ulint) GetLastError();
saved_error = GetLastError();
err = (ulint) saved_error;
ut_print_timestamp(stderr);
......@@ -3122,6 +3125,23 @@ retry:
name, offset,
(ulong) n, (ulong) len, (ulong) err);
/* Ask Windows to prepare a standard message for a
GetLastError() */
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, saved_error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&winmsg, 0, NULL);
if (winmsg) {
fprintf(stderr,
"InnoDB: FormatMessage: Error number %lu means '%s'.\n",
(ulong) saved_error, winmsg);
LocalFree(winmsg);
}
if (strerror((int) err) != NULL) {
fprintf(stderr,
"InnoDB: Error number %lu means '%s'.\n",
......
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