ha_innodb.cc, sync0sync.h, sync0sync.c:

  Use only noninlined InnoDB functions in ha_innodb.cc
parent a4a703ba
...@@ -65,6 +65,15 @@ NOTE! The following macro should be used in mutex locking, not the ...@@ -65,6 +65,15 @@ NOTE! The following macro should be used in mutex locking, not the
corresponding function. */ corresponding function. */
#define mutex_enter(M) mutex_enter_func((M), IB__FILE__, __LINE__) #define mutex_enter(M) mutex_enter_func((M), IB__FILE__, __LINE__)
/**********************************************************************
A noninlined function that reserves a mutex. In ha_innodb.cc we have disabled
inlining of InnoDB functions, and no inlined functions should be called from
there. That is why we need to duplicate the inlined function here. */
void
mutex_enter_noninline(
/*==================*/
mutex_t* mutex); /* in: mutex */
/****************************************************************** /******************************************************************
NOTE! The following macro should be used in mutex locking, not the NOTE! The following macro should be used in mutex locking, not the
corresponding function. */ corresponding function. */
...@@ -105,6 +114,13 @@ mutex_exit( ...@@ -105,6 +114,13 @@ mutex_exit(
/*=======*/ /*=======*/
mutex_t* mutex); /* in: pointer to mutex */ mutex_t* mutex); /* in: pointer to mutex */
/********************************************************************** /**********************************************************************
Releases a mutex. */
void
mutex_exit_noninline(
/*=================*/
mutex_t* mutex); /* in: mutex */
/**********************************************************************
Returns TRUE if no mutex or rw-lock is currently locked. Returns TRUE if no mutex or rw-lock is currently locked.
Works only in the debug version. */ Works only in the debug version. */
......
...@@ -167,6 +167,30 @@ struct sync_level_struct{ ...@@ -167,6 +167,30 @@ struct sync_level_struct{
ulint level; /* level of the latch in the latching order */ ulint level; /* level of the latch in the latching order */
}; };
/**********************************************************************
A noninlined function that reserves a mutex. In ha_innodb.cc we have disabled
inlining of InnoDB functions, and no inlined functions should be called from
there. That is why we need to duplicate the inlined function here. */
void
mutex_enter_noninline(
/*==================*/
mutex_t* mutex) /* in: mutex */
{
mutex_enter(mutex);
}
/**********************************************************************
Releases a mutex. */
void
mutex_exit_noninline(
/*=================*/
mutex_t* mutex) /* in: mutex */
{
mutex_exit(mutex);
}
/********************************************************************** /**********************************************************************
Creates, or rather, initializes a mutex object in a specified memory Creates, or rather, initializes a mutex object in a specified memory
location (which must be appropriately aligned). The mutex is initialized location (which must be appropriately aligned). The mutex is initialized
......
...@@ -15,7 +15,9 @@ ...@@ -15,7 +15,9 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* This file defines the InnoDB handler: the interface between MySQL and /* This file defines the InnoDB handler: the interface between MySQL and
InnoDB */ InnoDB
NOTE: You can only use noninlined InnoDB functions in this file, because we
have disables the InnoDB inlining in this file. */
#ifdef __GNUC__ #ifdef __GNUC__
#pragma implementation // gcc: Class implementation #pragma implementation // gcc: Class implementation
...@@ -64,6 +66,7 @@ extern "C" { ...@@ -64,6 +66,7 @@ extern "C" {
#include "../innobase/include/btr0cur.h" #include "../innobase/include/btr0cur.h"
#include "../innobase/include/btr0btr.h" #include "../innobase/include/btr0btr.h"
#include "../innobase/include/fsp0fsp.h" #include "../innobase/include/fsp0fsp.h"
#include "../innobase/include/sync0sync.h"
} }
#define HA_INNOBASE_ROWS_IN_TABLE 10000 /* to get optimization right */ #define HA_INNOBASE_ROWS_IN_TABLE 10000 /* to get optimization right */
...@@ -4629,7 +4632,7 @@ innodb_show_status( ...@@ -4629,7 +4632,7 @@ innodb_show_status(
long flen; long flen;
char* str; char* str;
mutex_enter(&srv_monitor_file_mutex); mutex_enter_noninline(&srv_monitor_file_mutex);
rewind(srv_monitor_file); rewind(srv_monitor_file);
srv_printf_innodb_monitor(srv_monitor_file); srv_printf_innodb_monitor(srv_monitor_file);
flen = ftell(srv_monitor_file); flen = ftell(srv_monitor_file);
...@@ -4650,7 +4653,7 @@ innodb_show_status( ...@@ -4650,7 +4653,7 @@ innodb_show_status(
str[flen] = 0; str[flen] = 0;
} }
mutex_exit(&srv_monitor_file_mutex); mutex_exit_noninline(&srv_monitor_file_mutex);
List<Item> field_list; List<Item> field_list;
......
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