summaryrefslogtreecommitdiff
path: root/sql/wsrep_mysqld.h
diff options
context:
space:
mode:
authorNirbhay Choubey <nirbhay@mariadb.com>2015-09-16 23:20:57 -0400
committerNirbhay Choubey <nirbhay@mariadb.com>2015-09-25 18:24:39 -0400
commit59037d962985ca46ccce379ed8b373b57a9e38f0 (patch)
treebd54d3b5ad8d412d92585e74c7ba5e37e0e485de /sql/wsrep_mysqld.h
parent30711c6650fc7e2f166f29d0bc59eeab64dadb3e (diff)
downloadmariadb-git-59037d962985ca46ccce379ed8b373b57a9e38f0.tar.gz
MDEV-8208: Sporadic SEGFAULT on startup
Problem: When mysqld starts as a galera node, it creates 2 system threads (applier & rollbacker) using start_wsrep_THD(). These threads are created before plugin initialization (plugin_init()) for SST methods like rsync and xtrabackup. The threads' initialization itself can proceed in parallel to mysqld's main thread of execution. As a result, the thread initialization code (start_wsrep_THD()) can end up accessing some un/partially initialized structures (like maria_hton, in this particular case) resulting in segfault. Solution: Fixed by calling THD::init_for_queries() (which accesses maria_hton) only after the plugins have been initialized.
Diffstat (limited to 'sql/wsrep_mysqld.h')
-rw-r--r--sql/wsrep_mysqld.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h
index d02d59e767e..24af4ec0953 100644
--- a/sql/wsrep_mysqld.h
+++ b/sql/wsrep_mysqld.h
@@ -86,6 +86,7 @@ extern my_bool wsrep_slave_FK_checks;
extern my_bool wsrep_slave_UK_checks;
extern ulong wsrep_running_threads;
extern bool wsrep_new_cluster;
+extern my_bool wsrep_creating_startup_threads;
extern bool wsrep_gtid_mode;
extern uint32 wsrep_gtid_domain_id;
@@ -341,6 +342,7 @@ int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len);
#define wsrep_thr_init() do {} while(0)
#define wsrep_thr_deinit() do {} while(0)
#define wsrep_running_threads (0)
+#define wsrep_creating_startup_threads (0)
#endif /* WITH_WSREP */
#endif /* WSREP_MYSQLD_H */