Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
5.5.24
-
None
-
None
Description
This bug was introduced with merge from MySQL 5.5:
rpl.rpl_auto_increment 'mix,xtradb' w1 [ pass ] 1972
***Warnings generated in error logs during shutdown after running tests: rpl.rpl_auto_increment
Warning: 114 bytes lost, allocated at sql/log_event.cc:3223, sql/log_event.cc:1527, sql/log_event.cc:1379, sql/slave.cc:5017, sql/slave.cc:2711, sql/slave.cc:3622, perfschema/pfs.cc:1015, ??:0
Warning: 288 bytes lost, allocated at sql/log_event.h:1101, sql/log_event.cc:1527, sql/log_event.cc:1379, sql/slave.cc:5017, sql/slave.cc:2711, sql/slave.cc:3622, perfschema/pfs.cc:1015, ??:0
Warning: 70 bytes lost, allocated at sql/log_event.cc:1367, sql/slave.cc:5017, sql/slave.cc:2711, sql/slave.cc:3622, perfschema/pfs.cc:1015, ??:0, ??:0
...
The problem is the newly introduced class in MySQL 5.5, class
Deferred_log_events:
bool is_last(Log_event *ev)
{ return ev == last_added; };
But when the memory pointed to by last_added is freed, the last_added pointer
is not reset. This causes is_last() to randomly return true incorrectly,
depending on what exact pointer is returned by malloc(). This in turn causes
exec_relay_log_event() to randomly not free its events.