diff options
author | Dmitry Shulga <Dmitry.Shulga@Sun.COM> | 2010-09-22 19:53:06 +0700 |
---|---|---|
committer | Dmitry Shulga <Dmitry.Shulga@Sun.COM> | 2010-09-22 19:53:06 +0700 |
commit | c7ccc7265e8ff1a4bca27928a36d434574551fec (patch) | |
tree | b741132877ba45fabaaaf875d261911193d79b22 /sql/log.cc | |
parent | 386d50478c20c863ccb78c81bdcb79bfeeb6089a (diff) | |
download | mariadb-git-c7ccc7265e8ff1a4bca27928a36d434574551fec.tar.gz |
Fixed bug#56821 - failure to start the MySQL Service.
Diffstat (limited to 'sql/log.cc')
-rw-r--r-- | sql/log.cc | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/sql/log.cc b/sql/log.cc index 503b3bb5cff..56f151fe2ab 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -5072,10 +5072,32 @@ extern "C" my_bool reopen_fstreams(const char *filename, FILE *outstream, FILE *errstream) { int handle_fd; - int stream_fd; + int err_fd, out_fd; HANDLE osfh; - DBUG_ASSERT(filename && (outstream || errstream)); + DBUG_ASSERT(filename && errstream); + + // Services don't have stdout/stderr on Windows, so _fileno returns -1. + err_fd= _fileno(errstream); + if (err_fd < 0) + { + if (!freopen(filename, "a+", errstream)) + return TRUE; + + setbuf(errstream, NULL); + err_fd= _fileno(errstream); + } + + if (outstream) + { + out_fd= _fileno(outstream); + if (out_fd < 0) + { + if (!freopen(filename, "a+", outstream)) + return TRUE; + out_fd= _fileno(outstream); + } + } if ((osfh= CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | @@ -5091,24 +5113,16 @@ extern "C" my_bool reopen_fstreams(const char *filename, return TRUE; } - if (outstream) + if (_dup2(handle_fd, err_fd) < 0) { - stream_fd= _fileno(outstream); - if (_dup2(handle_fd, stream_fd) < 0) - { - CloseHandle(osfh); - return TRUE; - } + CloseHandle(osfh); + return TRUE; } - if (errstream) + if (outstream && _dup2(handle_fd, out_fd) < 0) { - stream_fd= _fileno(errstream); - if (_dup2(handle_fd, stream_fd) < 0) - { - CloseHandle(osfh); - return TRUE; - } + CloseHandle(osfh); + return TRUE; } _close(handle_fd); |