summaryrefslogtreecommitdiff
path: root/sql/log.cc
diff options
context:
space:
mode:
authorPraveenkumar Hulakund <praveenkumar.hulakund@oracle.com>2014-07-17 11:21:18 +0530
committerPraveenkumar Hulakund <praveenkumar.hulakund@oracle.com>2014-07-17 11:21:18 +0530
commitcd4fb2aeae85d1dc8f2d1e0f2d9fe4ef500e9961 (patch)
treeb031fe1b6f722adebfae698fee9b50be217091cb /sql/log.cc
parent354e923cfeef4909bd75ec4bfded8a0e53bb9cdb (diff)
downloadmariadb-git-cd4fb2aeae85d1dc8f2d1e0f2d9fe4ef500e9961.tar.gz
Bug#14757009: WHEN THE GENERAL_LOG IS A SOCKET AND THE READER
GOES AWAY, MYSQL QUITS WORKING. Analysis: ----------------- Issue in this bug and in bug 11907705 is, the socket file or fifo file is set for general log at command line while starting the server. But currently, only regular file can be set for the general log. Instead of reporting any error, the provided files are opened for writing and continued. Because of this issues mentioned in the bug reports are seen. As mentioned, only when any non-regular file is set for general log at command line while starting the server, these issues are seen. If general log file is set to non-regular file from CLI using system variable general_log_file then error is reported. These issues can also be faced with slow query log file, if it is set to non-regular file. Fix: ----------------- Currently while starting the server if we fail to open log file then we report an error, disable logging to file and continue. To fix issue reported code is modified to check whether file is regular file or not before opening it. If file is not a regular file then error is logged to error log and logging to file is disabled.
Diffstat (limited to 'sql/log.cc')
-rw-r--r--sql/log.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/sql/log.cc b/sql/log.cc
index 7327015deb5..d322abcd742 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -2322,6 +2322,7 @@ bool MYSQL_LOG::open(
const char *new_name, enum cache_type io_cache_type_arg)
{
char buff[FN_REFLEN];
+ MY_STAT f_stat;
File file= -1;
int open_flags= O_CREAT | O_BINARY;
DBUG_ENTER("MYSQL_LOG::open");
@@ -2339,6 +2340,10 @@ bool MYSQL_LOG::open(
log_type_arg, io_cache_type_arg))
goto err;
+ /* File is regular writable file */
+ if (my_stat(log_file_name, &f_stat, MYF(0)) && !MY_S_ISREG(f_stat.st_mode))
+ goto err;
+
if (io_cache_type == SEQ_READ_APPEND)
open_flags |= O_RDWR | O_APPEND;
else