Description:
Pushbuild fails on pb-valgrind, here: https://intranet.mysql.com/secure/pushbuild/showpush.pl?dir=mysql-5.1&order=1603
Valgrind log:
VALGRIND: 'Conditional jump or move depends on uninitialised value(s)'
COUNT: 18
FUNCTION: int10_to_str FILES: master.err
TESTS: binlog.binlog_old_versions binlog.binlog_start_comment main.mysqlbinlog rpl.rpl_bug31076
STACK: at 0xA27EF9: int10_to_str (int2str.c:142)
by 0xA2859D: llstr (llstr.c:32)
by 0x78C77C: apply_event_and_update_pos(Log_event*, THD*, Relay_log_info*, bool) (slave.cc:1900)
by 0x7E3FC9: mysql_client_binlog_statement(THD*) (sql_binlog.cc:207)
by 0x63F241: mysql_execute_command(THD*) (sql_parse.cc:4583)
by 0x643765: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5622)
by 0x643D36: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1121)
by 0x64508A: do_command(THD*) (sql_parse.cc:781)
by 0x63558B: handle_one_connection (sql_connect.cc:1120)
by 0x4B2A192: start_thread (in /lib64/libpthread-2.4.so)
by 0x51A145C: clone (in /lib64/libc-2.4.so)
The failing line is in slave.cc, apply_event_and_update_pos(), where it does:
DBUG_PRINT("info", ("event %s %s",
llstr(rli->event_relay_log_pos, buf),
rli->event_relay_log_name));
If apply_event_and_update_pos() is called from a BINLOG statement (instead of from the SQL thread), then rli->event_relay_log_pos is uninitialized at this point.
The root of the error is that rli->event_relay_log_pos is not initialized to 0 in Relay_log_info() constructor.
How to repeat:
Issue a BINLOG statement with valgrind on.
Suggested fix:
===== sql/rpl_rli.cc 1.17 vs edited =====
--- 1.17/sql/rpl_rli.cc 2008-02-05 08:22:17 +01:00
+++ edited/sql/rpl_rli.cc 2008-02-08 21:03:06 +01:00
@@ -32,8 +32,9 @@ int init_strvar_from_file(char *var, int
Relay_log_info::Relay_log_info()
:Slave_reporting_capability("SQL"),
no_storage(FALSE), replicate_same_server_id(::replicate_same_server_id),
- info_fd(-1), cur_log_fd(-1), save_temporary_tables(0),
+ info_fd(-1), cur_log_fd(-1), cur_log(0), save_temporary_tables(0),
group_relay_log_pos(0),
+ event_relay_log_pos(0), future_event_relay_log_pos(0),
cur_log_old_open_count(0), group_master_log_pos(0), log_space_total(0),
ignore_log_space_limit(0), last_master_timestamp(0), slave_skip_counter(0),
abort_pos_wait(0), slave_run_id(0), sql_thd(0),