MDEV-12144 Signal 6 crash corrupts ibd files

Avoid using STDERR_FILENO. The server uses freopen(stderr),
so stderr can be on any file descriptor.
This commit is contained in:
Sergei Golubchik
2017-07-14 15:30:27 +02:00
parent 7338d3f221
commit 0375f2e273
3 changed files with 4 additions and 5 deletions

View File

@ -421,9 +421,8 @@ extern "C" int madvise(void *addr, size_t len, int behav);
#define SIGNAL_HANDLER_RESET_ON_DELIVERY
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO fileno(stderr)
#endif
/* don't assume that STDERR_FILENO is 2, mysqld can freopen */
#undef STDERR_FILENO
/*
Deprecated workaround for false-positive uninitialized variables

View File

@ -143,7 +143,7 @@ static int no_close(void *cookie __attribute__((unused)))
/*
A hack around a race condition in the implementation of freopen.
The race condition steams from the fact that the current fd of
The race condition stems from the fact that the current fd of
the stream is closed before its number is used to duplicate the
new file descriptor. This defeats the desired atomicity of the
close and duplicate of dup2().

View File

@ -744,7 +744,7 @@ void my_safe_print_str(const char *val, int len)
size_t my_write_stderr(const void *buf, size_t count)
{
return (size_t) write(STDERR_FILENO, buf, count);
return (size_t) write(fileno(stderr), buf, count);
}