From 97744101f4665b49b20c388f4d24b4364f299d64 Mon Sep 17 00:00:00 2001 From: Praveenkumar Hulakund Date: Thu, 17 Jul 2014 11:21:18 +0530 Subject: 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. --- sql/log.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'sql/log.cc') 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 -- cgit v1.2.1