mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Bug#11763573 - 56299: MUTEX DEADLOCK WITH COM_BINLOG_DUMP, BINLOG PURGE, AND PROCESSLIST/KILL
The bug case is similar to one fixed earlier bug_49536. Deadlock involving LOCK_log appears to be possible because the purge running thread is holding LOCK_log whereas there is no sense of doing that and which fact was exploited by the earlier bug fixes. Fixed with small reengineering of rotate_and_purge(), adding two new methods and setting up a policy to execute those instead of the former rotate_and_purge(RP_LOCK_LOG_IS_ALREADY_LOCKED). The policy for using rotate(), purge() is that if the caller acquires LOCK_log itself, it should call rotate(), release the mutex and run purge(). Side effect of this patch is refining error message of bug@11747416 to print the whole path.
This commit is contained in:
@@ -1030,12 +1030,9 @@ err:
|
||||
detailing the fatal error message with coordinates
|
||||
of the last position read.
|
||||
*/
|
||||
char b_start[FN_REFLEN], b_end[FN_REFLEN];
|
||||
fn_format(b_start, coord->file_name, "", "", MY_REPLACE_DIR);
|
||||
fn_format(b_end, log_file_name, "", "", MY_REPLACE_DIR);
|
||||
my_snprintf(error_text, sizeof(error_text), fmt, errmsg,
|
||||
b_start, (llstr(coord->pos, llbuff1), llbuff1),
|
||||
b_end, (llstr(my_b_tell(&log), llbuff2), llbuff2));
|
||||
coord->file_name, (llstr(coord->pos, llbuff1), llbuff1),
|
||||
log_file_name, (llstr(my_b_tell(&log), llbuff2), llbuff2));
|
||||
}
|
||||
else
|
||||
strcpy(error_text, errmsg);
|
||||
|
Reference in New Issue
Block a user