From 6366a9090c7fc24f0e13b5b9d73d6777dcda9d9e Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 9 Apr 2004 22:18:18 +0300 Subject: [PATCH] ha_innodb.cc, sync0sync.h, sync0sync.c: Use only noninlined InnoDB functions in ha_innodb.cc innobase/sync/sync0sync.c: Use only noninlined InnoDB functions in ha_innodb.cc innobase/include/sync0sync.h: Use only noninlined InnoDB functions in ha_innodb.cc sql/ha_innodb.cc: Use only noninlined InnoDB functions in ha_innodb.cc --- innobase/include/sync0sync.h | 16 ++++++++++++++++ innobase/sync/sync0sync.c | 24 ++++++++++++++++++++++++ sql/ha_innodb.cc | 9 ++++++--- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/innobase/include/sync0sync.h b/innobase/include/sync0sync.h index abc5350b6c0..38f1489682a 100644 --- a/innobase/include/sync0sync.h +++ b/innobase/include/sync0sync.h @@ -65,6 +65,15 @@ NOTE! The following macro should be used in mutex locking, not the corresponding function. */ #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 corresponding function. */ @@ -105,6 +114,13 @@ mutex_exit( /*=======*/ 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. Works only in the debug version. */ diff --git a/innobase/sync/sync0sync.c b/innobase/sync/sync0sync.c index 952510c49e3..eaeb56b4983 100644 --- a/innobase/sync/sync0sync.c +++ b/innobase/sync/sync0sync.c @@ -167,6 +167,30 @@ struct sync_level_struct{ 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 location (which must be appropriately aligned). The mutex is initialized diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 759679d5bd6..7a651fc12d9 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -15,7 +15,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* 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__ #pragma implementation // gcc: Class implementation @@ -64,6 +66,7 @@ extern "C" { #include "../innobase/include/btr0cur.h" #include "../innobase/include/btr0btr.h" #include "../innobase/include/fsp0fsp.h" +#include "../innobase/include/sync0sync.h" } #define HA_INNOBASE_ROWS_IN_TABLE 10000 /* to get optimization right */ @@ -4629,7 +4632,7 @@ innodb_show_status( long flen; char* str; - mutex_enter(&srv_monitor_file_mutex); + mutex_enter_noninline(&srv_monitor_file_mutex); rewind(srv_monitor_file); srv_printf_innodb_monitor(srv_monitor_file); flen = ftell(srv_monitor_file); @@ -4650,7 +4653,7 @@ innodb_show_status( str[flen] = 0; } - mutex_exit(&srv_monitor_file_mutex); + mutex_exit_noninline(&srv_monitor_file_mutex); List field_list;