1
0
mirror of https://github.com/MariaDB/server.git synced 2025-09-02 09:41:40 +03:00

BUG#30752 rpl_dual_pos_advance valgrind (jump depends on uninitialized LOG_INFO)

Problem: one thread could read uninitialized memory from (the stack of) another
thread.
Fix: swapped order of initializing the memory and making it available to the
other thread.
Fix: put lock around the statement that makes the memory available to the other
thread.
Fix: all fields of the struct are now initialized in the constructor, to avoid
future problems.


sql/sql_class.h:
  Initialize all members in constructor for more safe future code.
sql/sql_repl.cc:
  Swap order so that linfo is first initialized, then assigned, instead of the
  other way around.
  Put a lock around the assignment. We use LOCK_thread_count since log_in_use
  uses it: log_in_use may be running concurrently, called from
  MYSQL_LOG::purge_logs.
This commit is contained in:
unknown
2007-10-03 11:57:14 +02:00
parent eefbdfdb03
commit 42cea00e03
2 changed files with 15 additions and 3 deletions

View File

@@ -159,7 +159,13 @@ typedef struct st_log_info
my_off_t pos;
bool fatal; // if the purge happens to give us a negative offset
pthread_mutex_t lock;
st_log_info():fatal(0) { pthread_mutex_init(&lock, MY_MUTEX_INIT_FAST);}
st_log_info()
: index_file_offset(0), index_file_start_offset(0),
pos(0), fatal(0)
{
log_file_name[0] = '\0';
pthread_mutex_init(&lock, MY_MUTEX_INIT_FAST);
}
~st_log_info() { pthread_mutex_destroy(&lock);}
} LOG_INFO;