| Bug #81675 | mysqlbinlog does not free the existing connection before opening new remote one | ||
|---|---|---|---|
| Submitted: | 1 Jun 2016 11:26 | Modified: | 5 Sep 2016 11:41 |
| Reporter: | Laurynas Biveinis (OCA) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Command-line Clients | Severity: | S3 (Non-critical) |
| Version: | 5.5+ | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | asan, lsan, mysqlbinlog | ||
[1 Jun 2016 11:35]
Laurynas Biveinis
The same issue exists on 5.5 and 5.6, but there it's masked by other LSan/client Valgrind bugs: bug 80014, bug 81674, bug 78223
[7 Jun 2016 8:40]
MySQL Verification Team
Hello Laurynas, Thank you for the report. Observed this with 5.7.13 source build. Thanks, Umesh
[7 Jun 2016 8:41]
MySQL Verification Team
Build log and test results
Attachment: 81675_5.7.13.build_log (application/octet-stream, text), 282.12 KiB.
[14 Jul 2016 11:31]
Laurynas Biveinis
Bug 81675 fix for 5.5/5.6/5.7 (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: bug81675.patch (application/octet-stream, text), 1.11 KiB.
[14 Jul 2016 11:32]
Laurynas Biveinis
I have submitted a Percona Server version of the fix, which strives to be minimal. For a proper fix I would try to restructure mysqlbinlog.cc code so that connection lifetime is managed more naturally.
[5 Sep 2016 11:41]
David Moss
Posted by developer: Thank you for your feedback, this has been fixed in upcoming versions and the following was added to the 5.5.52 / 5.6.33 /5.7.15 change logs: mysqlbinlog --read-from-remote-server log1 log2 was opening a new connection for log2 without freeing the connection used for log1. Thanks to Laurynas Biveinis for the contribution.

Description: "mysqlbinlog --read-from-remote-server log1 log2" opens a new connection to read log2 without freeing the one used for reading log1. How to repeat: On 5.7, with LeakSanitizer-enabled AddressSanitizer: cmake ... -DWITH_ASAN=ON ... ... $ ./mtr --debug-server binlog_mysqlbinlog_start_stop ... binlog.binlog_mysqlbinlog_start_stop 'mix' [ fail ] Test ended at 2016-06-01 14:17:00 CURRENT_TEST: binlog.binlog_mysqlbinlog_start_stop ================================================================= ==5002==ERROR: LeakSanitizer: detected memory leaks Direct leak of 1336 byte(s) in 1 object(s) allocated from: #0 0x7fd39899e6e9 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x986e9) #1 0x4e939f in my_raw_malloc /home/laurynas/mysql-server/mysys/my_malloc.c:189 #2 0x4e939f in my_malloc /home/laurynas/mysql-server/mysys/my_malloc.c:54 #3 0x46a62e in mysql_init /home/laurynas/mysql-server/sql-common/client.c:2446 #4 0x448569 in safe_connect /home/laurynas/mysql-server/client/mysqlbinlog.cc:2260 #5 0x448569 in dump_remote_log_entries /home/laurynas/mysql-server/client/mysqlbinlog.cc:2539 #6 0x448569 in dump_single_log /home/laurynas/mysql-server/client/mysqlbinlog.cc:2328 #7 0x448569 in dump_multiple_logs /home/laurynas/mysql-server/client/mysqlbinlog.cc:2368 #8 0x44a6de in main /home/laurynas/mysql-server/client/mysqlbinlog.cc:3430 #9 0x7fd39789b82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f) (...other connection and SSL-related leaks) Suggested fix: At the start of safe_connect(), if mysql != NULL, call mysql_close for it, before mysql_init