Suppress the known warnings generated by filesort().
The real fix belongs to worklog 1509:
Pack values of non-sorted fields in the sort buffer
(which is basically the same issue, but in an optimization context:
We are writing the entire sort buffer to disk,
including un-used space for varchar columns.)
Valgrind gets confused by the call stack generated with optimized
builds, with inlined functions.
Reduced the stack context for the suppression in lf_pinbox_get_pins.
- Removed files specific to compiling on OS/2
- Removed files specific to SCO Unix packaging
- Removed "libmysqld/copyright", text is included in documentation
- Removed LaTeX headers for NDB Doxygen documentation
- Removed obsolete NDB files
- Removed "mkisofs" binaries
- Removed the "cvs2cl.pl" script
- Changed a few GPL texts to use "program" instead of "library"
Before this fix, the server could crash during shutdown,
due to race conditions, that occured when killing the server.
In particular, the performance schema instrumentation handle,
PSI_server, and the performance schema itself would be cleaned up
too soon, causing race conditions with a running kill server thread.
The specifics of the race condition found are that:
the main thread executing "PSI_server= NULL" can cause crashes in
other threads still running, which are executing
"if (PSI_server != NULL) PSI_server->xxx()"
as part of the performance schema instrumentation.
While the bug was reported for the kill server thread,
in theory the same crash could happen with the signal thread,
as found by code analysis.
The correct fix would be to only shutdown the performance schema
and set PSI_server to NULL after every other thread is guaranteed
to be completed, including the kill_server_thread.
However, due to the existing mysqld server design, this is not the case.
See in particular bug number 56666.
The work around used to fix this race condition is to simply not
perform the call to shutdown_performance_schema() when the server exits,
and to keep the PSI_server pointer unchanged.
This will cause memory leaks to be reported by tools like valgrind,
but no memory leak actually happen because the process is about to exit().
As a result, the file mysql-test/valgrind.supp has been updated
to filter out these false positive messages.
This code has been tested with running in a loop the following
tests in parallel, which have been known to fail with race conditions
in the past:
- rpl_change_master
- binlog_max_extension
- events_restart
- rpl_heartbeat_basic
and no crash of test failure has been seen with the changed code.
innodb.innodb-zip [ fail ] Found warnings/errors in server log file!
Test ended at 2010-05-17 16:41:25
line
==31182== Thread 13:
==31182== Conditional jump or move depends on uninitialised value(s)
==31182== at 0xA9193F: longest_match (deflate.c:1143)
==31182== by 0xA92C19: deflate_slow (deflate.c:1595)
==31182== by 0xA90C6B: deflate (deflate.c:790)
==31182== by 0x928A07: btr_store_big_rec_extern_fields (btr0cur.c:4092)
==31182== by 0x9C9B90: row_ins_index_entry_low (row0ins.c:2119)
==31182== by 0x9C9DFB: row_ins_index_entry (row0ins.c:2167)
==31182== by 0x9CA057: row_ins_index_entry_step (row0ins.c:2252)
==31182== by 0x9CA0FD: row_ins (row0ins.c:2384)
==31182== by 0x9CA760: row_ins_step (row0ins.c:2494)
==31182== by 0x8CBF7E: row_insert_for_mysql (row0mysql.c:1138)
==31182== by 0x8BCF32: ha_innobase::write_row(unsigned char*) (ha_innodb.cc:4929)
==31182== by 0x736E03: handler::ha_write_row(unsigned char*) (handler.cc:4682)
==31182== by 0x5B0EEE: write_record(THD*, TABLE*, st_copy_info*) (sql_insert.cc:1670)
==31182== by 0x5B129D: select_insert::send_data(List<Item>&) (sql_insert.cc:3279)
==31182== by 0x5F31ED: end_send(JOIN*, st_join_table*, bool) (sql_select.cc:12428)
==31182== by 0x5F9B9B: evaluate_join_record(JOIN*, st_join_table*, int) (sql_select.cc:11632)
The server shutdown and start code triggered the valgrind failures
within nptl_pthread_exit_hack_handler on Ubuntu 9.04, x86 (but not amd64)
in rpl_trigger.test file.
For fixing the bug, suppress valgrind failures within nptl_pthread_exit_hack_handler
on Ubuntu 9.04, x86 (but not amd64). Because the server shutdown and start
code has been heavily used in mysql test set.
If delayed insert fails to upgrade the lock it was not
freeing the temporary memory storage used to keep
newly constructed blob values in memory.
Fixed by iterating over the remaining rows in the delayed
insert rowset and freeing the blob storage for each row.
No test suite because it involves concurrent delayed inserts
on a table and cannot easily be made deterministic.
Added a correct valgrind suppression for Fedora 9.
- Added suppressions for dlopen to make plugin test pass.
- Do not pass empty string to mysqld, since my_getopt is
not capable to handle it.
- Re-enabled trailing UNINSTALL PLUGIN statement of plugin.test.
The memory leak described in the bug report happens in libdl, not
in mysqld. On some valgrind installations this error is suppressed
by default, no idea why it isn't suppressed on pb-valgrind.
<observation>
If library remains open after thread has finished, and is closed by
another thread, we get memory leak. But in case library is opened and
closed by the same thread no leak occurs.
</observation>
The problem is (most probably) caused by whole server shutting down before a
slave thread terminates correctly. Fixing this requires fixing server shutdown
code which has been done in 5.1 tree. Thus we ignore the issue in 5.0 assuming
that it is fixed in 5.1.
Fixed memory leak in _db_set() (Bug#24497 Valgrind warning: get_one_option)
Don't call net_clear() on COM_QUIT. This avoids a warning from net_clear() after shutdown: "skipped ## bytes from file"
BUG#21428: skipped 9 bytes from file: socket (3)" on "mysqladmin shutdown"