srv0start.h, srv0start.c, ha_innodb.cc:

  Add check that sizeof(trx_t) is the same in ha_inndob.cc and InnoDB compilation modules
parent f51bc42c
...@@ -79,6 +79,8 @@ innobase_shutdown_for_mysql(void); ...@@ -79,6 +79,8 @@ innobase_shutdown_for_mysql(void);
/*=============================*/ /*=============================*/
/* out: DB_SUCCESS or error code */ /* out: DB_SUCCESS or error code */
extern ulint srv_sizeof_trx_t_in_ha_innodb_cc;
extern ibool srv_startup_is_before_trx_rollback_phase; extern ibool srv_startup_is_before_trx_rollback_phase;
extern ibool srv_is_being_shut_down; extern ibool srv_is_being_shut_down;
......
...@@ -56,6 +56,8 @@ Created 2/16/1996 Heikki Tuuri ...@@ -56,6 +56,8 @@ Created 2/16/1996 Heikki Tuuri
#include "srv0start.h" #include "srv0start.h"
#include "que0que.h" #include "que0que.h"
ulint srv_sizeof_trx_t_in_ha_innodb_cc;
ibool srv_startup_is_before_trx_rollback_phase = FALSE; ibool srv_startup_is_before_trx_rollback_phase = FALSE;
ibool srv_is_being_started = FALSE; ibool srv_is_being_started = FALSE;
ibool srv_was_started = FALSE; ibool srv_was_started = FALSE;
...@@ -960,6 +962,15 @@ innobase_start_or_create_for_mysql(void) ...@@ -960,6 +962,15 @@ innobase_start_or_create_for_mysql(void)
"InnoDB: !!!!!!!!!!!!!! UNIV_MEM_DEBUG switched on !!!!!!!!!!!!!!!\n"); "InnoDB: !!!!!!!!!!!!!! UNIV_MEM_DEBUG switched on !!!!!!!!!!!!!!!\n");
#endif #endif
if (srv_sizeof_trx_t_in_ha_innodb_cc != (ulint)sizeof(trx_t)) {
fprintf(stderr,
"InnoDB: Error: trx_t size is %lu in ha_innodb.cc but %lu in srv0start.c\n"
"InnoDB: Check that pthread_mutex_t is defined in the same way in these\n"
"InnoDB: compilation modules. Cannot continue.\n",
srv_sizeof_trx_t_in_ha_innodb_cc, (ulint)sizeof(trx_t));
return(DB_ERROR);
}
log_do_write = TRUE; log_do_write = TRUE;
/* yydebug = TRUE; */ /* yydebug = TRUE; */
......
...@@ -747,6 +747,14 @@ innobase_init(void) ...@@ -747,6 +747,14 @@ innobase_init(void)
default_charset_info->sort_order, 256); default_charset_info->sort_order, 256);
} }
/* Since we in this module access directly the fields of a trx
struct, and due to different headers and flags it might happen that
mutex_t has a different size in this module and in InnoDB
modules, we check at run time that the size is the same in
these compilation modules. */
srv_sizeof_trx_t_in_ha_innodb_cc = sizeof(trx_t);
err = innobase_start_or_create_for_mysql(); err = innobase_start_or_create_for_mysql();
if (err != DB_SUCCESS) { if (err != DB_SUCCESS) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment