2001-02-17 13:19:19 +01:00
|
|
|
/******************************************************
|
|
|
|
The read-write lock (for thread synchronization)
|
|
|
|
|
|
|
|
(c) 1995 Innobase Oy
|
|
|
|
|
|
|
|
Created 9/11/1995 Heikki Tuuri
|
|
|
|
*******************************************************/
|
|
|
|
|
|
|
|
#include "sync0rw.h"
|
|
|
|
#ifdef UNIV_NONINL
|
|
|
|
#include "sync0rw.ic"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "os0thread.h"
|
|
|
|
#include "mem0mem.h"
|
|
|
|
#include "srv0srv.h"
|
|
|
|
|
|
|
|
ulint rw_s_system_call_count = 0;
|
|
|
|
ulint rw_s_spin_wait_count = 0;
|
2001-10-10 21:47:08 +02:00
|
|
|
ulint rw_s_os_wait_count = 0;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
ulint rw_s_exit_count = 0;
|
|
|
|
|
|
|
|
ulint rw_x_system_call_count = 0;
|
|
|
|
ulint rw_x_spin_wait_count = 0;
|
2001-10-10 21:47:08 +02:00
|
|
|
ulint rw_x_os_wait_count = 0;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
ulint rw_x_exit_count = 0;
|
|
|
|
|
|
|
|
/* The global list of rw-locks */
|
|
|
|
rw_lock_list_t rw_lock_list;
|
|
|
|
mutex_t rw_lock_list_mutex;
|
|
|
|
|
2004-03-12 16:14:51 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
/* The global mutex which protects debug info lists of all rw-locks.
|
|
|
|
To modify the debug info list of an rw-lock, this mutex has to be
|
|
|
|
acquired in addition to the mutex protecting the lock. */
|
|
|
|
|
|
|
|
mutex_t rw_lock_debug_mutex;
|
|
|
|
os_event_t rw_lock_debug_event; /* If deadlock detection does not
|
|
|
|
get immediately the mutex, it may
|
|
|
|
wait for this event */
|
|
|
|
ibool rw_lock_debug_waiters; /* This is set to TRUE, if there may
|
|
|
|
be waiters for the event */
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Creates a debug info struct. */
|
|
|
|
static
|
|
|
|
rw_lock_debug_t*
|
|
|
|
rw_lock_debug_create(void);
|
|
|
|
/*======================*/
|
|
|
|
/**********************************************************************
|
|
|
|
Frees a debug info struct. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rw_lock_debug_free(
|
|
|
|
/*===============*/
|
|
|
|
rw_lock_debug_t* info);
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Creates a debug info struct. */
|
|
|
|
static
|
|
|
|
rw_lock_debug_t*
|
|
|
|
rw_lock_debug_create(void)
|
|
|
|
/*======================*/
|
|
|
|
{
|
|
|
|
return((rw_lock_debug_t*) mem_alloc(sizeof(rw_lock_debug_t)));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Frees a debug info struct. */
|
|
|
|
static
|
|
|
|
void
|
|
|
|
rw_lock_debug_free(
|
|
|
|
/*===============*/
|
|
|
|
rw_lock_debug_t* info)
|
|
|
|
{
|
|
|
|
mem_free(info);
|
|
|
|
}
|
2004-03-12 16:14:51 +01:00
|
|
|
#endif /* UNIV_SYNC_DEBUG */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Creates, or rather, initializes an rw-lock object in a specified memory
|
|
|
|
location (which must be appropriately aligned). The rw-lock is initialized
|
|
|
|
to the non-locked state. Explicit freeing of the rw-lock with rw_lock_free
|
|
|
|
is necessary only if the memory block containing it is freed. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_create_func(
|
|
|
|
/*================*/
|
|
|
|
rw_lock_t* lock, /* in: pointer to memory */
|
This ChangeSet must be null-merged to 5.1.
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Bugs fixed:
- Bug #21468: InnoDB crash during recovery with corrupted data pages: XA bug?
- Bug #24299: Identifiers in foreign keys cannot contain U+0160, U+0360, ..., U+FF60
- Bug #24386: Performance degradation caused by instrumentation in mutex_struct
- Bug #24712: SHOW TABLE STATUS for file-per-table showing incorrect time fields
innobase/dict/dict0dict.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1030:
branches/5.0: Replace isspace() with a wrapper ib_isspace(), because on
Win32 isspace(0xa0) appears to hold. (Bug #24299)
innobase/include/sync0rw.h:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/include/sync0sync.h:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/include/sync0sync.ic:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/log/log0recv.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1076:
branches/5.0: Remove the unintentionally committed change to univ.i in r1075.
Fix assertion failure sync0sync.c line 1239
(the latter ut_error in sync_thread_reset_level())
in crash recovery when UNIV_SYNC_DEBUG is enabled.
Revision r1079:
branches/5.0: recv_recovery_from_checkpoint_finish(): Add 1 sec delay
before switching on the sync order checks in crash recovery, so that
file I/O threads have time to suspend themselves.
innobase/srv/srv0start.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1075:
branches/5.0: Fix assertion failure sync0sync.c line 1239
(the latter ut_error in sync_thread_reset_level())
in crash recovery when UNIV_SYNC_DEBUG is enabled.
Revision r1077:
branches/5.0: innobase_start_or_create_for_mysql(): Remove unnecessary delay
now that we moved the setting sync_order_checks_on=TRUE to log0recv.c,
to the start of the rollback phase in crash recovery.
innobase/sync/sync0rw.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/sync/sync0sync.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/trx/trx0roll.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1067:
branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql():
Protect the creation of trx_dummy_sess with kernel_mutex.
This error was introduced in r1046 and r1050.
Revision r1050:
branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046.
trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared
transaction in XA recovery, just in case our code would need the session
object also in that case (does not seem to need it right now).
Revision r1048:
branches/5.0: trx_rollback_for_mysql(): Do not set trx->sess back to NULL.
This bug was introduced in r1046.
Revision r1046:
branches/5.0: trx_rollback_for_mysql(): Ensure that trx->sess is non-NULL
when calling trx_general_rollback_for_mysql(). This removes a segmentation
fault when rolling back a prepared transaction in XA recovery. (Bug #21468)
innobase/trx/trx0trx.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1067:
branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql():
Protect the creation of trx_dummy_sess with kernel_mutex.
This error was introduced in r1046 and r1050.
Revision r1050:
branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046.
trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared
transaction in XA recovery, just in case our code would need the session
object also in that case (does not seem to need it right now).
sql/ha_innodb.cc:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
Revision r1099:
branches/5.0: Merge revision 1098 from trunk: Fix bug #24712: SHOW TABLE
STATUS for file-per-table showing incorrect time fields
2006-12-19 02:41:38 +01:00
|
|
|
#ifdef UNIV_DEBUG
|
|
|
|
const char* cmutex_name, /* in: mutex name */
|
|
|
|
#endif /* UNIV_DEBUG */
|
2004-05-14 15:06:21 +02:00
|
|
|
const char* cfile_name, /* in: file name where created */
|
This ChangeSet must be null-merged to 5.1.
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Bugs fixed:
- Bug #21468: InnoDB crash during recovery with corrupted data pages: XA bug?
- Bug #24299: Identifiers in foreign keys cannot contain U+0160, U+0360, ..., U+FF60
- Bug #24386: Performance degradation caused by instrumentation in mutex_struct
- Bug #24712: SHOW TABLE STATUS for file-per-table showing incorrect time fields
innobase/dict/dict0dict.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1030:
branches/5.0: Replace isspace() with a wrapper ib_isspace(), because on
Win32 isspace(0xa0) appears to hold. (Bug #24299)
innobase/include/sync0rw.h:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/include/sync0sync.h:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/include/sync0sync.ic:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/log/log0recv.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1076:
branches/5.0: Remove the unintentionally committed change to univ.i in r1075.
Fix assertion failure sync0sync.c line 1239
(the latter ut_error in sync_thread_reset_level())
in crash recovery when UNIV_SYNC_DEBUG is enabled.
Revision r1079:
branches/5.0: recv_recovery_from_checkpoint_finish(): Add 1 sec delay
before switching on the sync order checks in crash recovery, so that
file I/O threads have time to suspend themselves.
innobase/srv/srv0start.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1075:
branches/5.0: Fix assertion failure sync0sync.c line 1239
(the latter ut_error in sync_thread_reset_level())
in crash recovery when UNIV_SYNC_DEBUG is enabled.
Revision r1077:
branches/5.0: innobase_start_or_create_for_mysql(): Remove unnecessary delay
now that we moved the setting sync_order_checks_on=TRUE to log0recv.c,
to the start of the rollback phase in crash recovery.
innobase/sync/sync0rw.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/sync/sync0sync.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/trx/trx0roll.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1067:
branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql():
Protect the creation of trx_dummy_sess with kernel_mutex.
This error was introduced in r1046 and r1050.
Revision r1050:
branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046.
trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared
transaction in XA recovery, just in case our code would need the session
object also in that case (does not seem to need it right now).
Revision r1048:
branches/5.0: trx_rollback_for_mysql(): Do not set trx->sess back to NULL.
This bug was introduced in r1046.
Revision r1046:
branches/5.0: trx_rollback_for_mysql(): Ensure that trx->sess is non-NULL
when calling trx_general_rollback_for_mysql(). This removes a segmentation
fault when rolling back a prepared transaction in XA recovery. (Bug #21468)
innobase/trx/trx0trx.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1067:
branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql():
Protect the creation of trx_dummy_sess with kernel_mutex.
This error was introduced in r1046 and r1050.
Revision r1050:
branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046.
trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared
transaction in XA recovery, just in case our code would need the session
object also in that case (does not seem to need it right now).
sql/ha_innodb.cc:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
Revision r1099:
branches/5.0: Merge revision 1098 from trunk: Fix bug #24712: SHOW TABLE
STATUS for file-per-table showing incorrect time fields
2006-12-19 02:41:38 +01:00
|
|
|
ulint cline) /* in: file line where created */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
|
|
|
/* If this is the very first time a synchronization
|
|
|
|
object is created, then the following call initializes
|
|
|
|
the sync system. */
|
|
|
|
|
|
|
|
mutex_create(rw_lock_get_mutex(lock));
|
|
|
|
mutex_set_level(rw_lock_get_mutex(lock), SYNC_NO_ORDER_CHECK);
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
lock->mutex.cfile_name = cfile_name;
|
2001-02-17 13:19:19 +01:00
|
|
|
lock->mutex.cline = cline;
|
This ChangeSet must be null-merged to 5.1.
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Bugs fixed:
- Bug #21468: InnoDB crash during recovery with corrupted data pages: XA bug?
- Bug #24299: Identifiers in foreign keys cannot contain U+0160, U+0360, ..., U+FF60
- Bug #24386: Performance degradation caused by instrumentation in mutex_struct
- Bug #24712: SHOW TABLE STATUS for file-per-table showing incorrect time fields
innobase/dict/dict0dict.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1030:
branches/5.0: Replace isspace() with a wrapper ib_isspace(), because on
Win32 isspace(0xa0) appears to hold. (Bug #24299)
innobase/include/sync0rw.h:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/include/sync0sync.h:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/include/sync0sync.ic:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/log/log0recv.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1076:
branches/5.0: Remove the unintentionally committed change to univ.i in r1075.
Fix assertion failure sync0sync.c line 1239
(the latter ut_error in sync_thread_reset_level())
in crash recovery when UNIV_SYNC_DEBUG is enabled.
Revision r1079:
branches/5.0: recv_recovery_from_checkpoint_finish(): Add 1 sec delay
before switching on the sync order checks in crash recovery, so that
file I/O threads have time to suspend themselves.
innobase/srv/srv0start.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1075:
branches/5.0: Fix assertion failure sync0sync.c line 1239
(the latter ut_error in sync_thread_reset_level())
in crash recovery when UNIV_SYNC_DEBUG is enabled.
Revision r1077:
branches/5.0: innobase_start_or_create_for_mysql(): Remove unnecessary delay
now that we moved the setting sync_order_checks_on=TRUE to log0recv.c,
to the start of the rollback phase in crash recovery.
innobase/sync/sync0rw.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/sync/sync0sync.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
innobase/trx/trx0roll.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1067:
branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql():
Protect the creation of trx_dummy_sess with kernel_mutex.
This error was introduced in r1046 and r1050.
Revision r1050:
branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046.
trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared
transaction in XA recovery, just in case our code would need the session
object also in that case (does not seem to need it right now).
Revision r1048:
branches/5.0: trx_rollback_for_mysql(): Do not set trx->sess back to NULL.
This bug was introduced in r1046.
Revision r1046:
branches/5.0: trx_rollback_for_mysql(): Ensure that trx->sess is non-NULL
when calling trx_general_rollback_for_mysql(). This removes a segmentation
fault when rolling back a prepared transaction in XA recovery. (Bug #21468)
innobase/trx/trx0trx.c:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1067:
branches/5.0: trx_rollback_for_mysql(), trx_commit_for_mysql():
Protect the creation of trx_dummy_sess with kernel_mutex.
This error was introduced in r1046 and r1050.
Revision r1050:
branches/5.0: trx_rollback_for_mysql(): Fix the comment introduced in r1046.
trx_commit_for_mysql(): Use the dummy trx->sess also for committing a prepared
transaction in XA recovery, just in case our code would need the session
object also in that case (does not seem to need it right now).
sql/ha_innodb.cc:
Applied innodb-5.0-ss1040 and innodb-5.0-ss1099 snapshots.
Revision r1040:
branches/5.0: Port r1039 from trunk:
Port r1034 from branches/zip: Remove some instrumentation and reduce
the output of SHOW MUTEX STATUS in non-debug builds. (Bug #24386)
Revision r1099:
branches/5.0: Merge revision 1098 from trunk: Fix bug #24712: SHOW TABLE
STATUS for file-per-table showing incorrect time fields
2006-12-19 02:41:38 +01:00
|
|
|
#if defined UNIV_DEBUG && !defined UNIV_HOTBACKUP
|
|
|
|
lock->mutex.cmutex_name = cmutex_name;
|
|
|
|
lock->mutex.mutex_type = 1;
|
|
|
|
#endif /* UNIV_DEBUG && !UNIV_HOTBACKUP */
|
2004-12-24 12:13:32 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
rw_lock_set_waiters(lock, 0);
|
|
|
|
rw_lock_set_writer(lock, RW_LOCK_NOT_LOCKED);
|
|
|
|
lock->writer_count = 0;
|
|
|
|
rw_lock_set_reader_count(lock, 0);
|
|
|
|
|
|
|
|
lock->writer_is_wait_ex = FALSE;
|
|
|
|
|
2004-03-12 16:14:51 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
UT_LIST_INIT(lock->debug_list);
|
|
|
|
|
|
|
|
lock->level = SYNC_LEVEL_NONE;
|
2004-03-12 16:14:51 +01:00
|
|
|
#endif /* UNIV_SYNC_DEBUG */
|
|
|
|
lock->magic_n = RW_LOCK_MAGIC_N;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
lock->cfile_name = cfile_name;
|
2001-02-17 13:19:19 +01:00
|
|
|
lock->cline = cline;
|
|
|
|
|
2004-05-27 14:27:43 +02:00
|
|
|
lock->last_s_file_name = "not yet reserved";
|
|
|
|
lock->last_x_file_name = "not yet reserved";
|
2001-10-10 21:47:08 +02:00
|
|
|
lock->last_s_line = 0;
|
|
|
|
lock->last_x_line = 0;
|
This ChangeSet must be null-merged to 5.1. Applied innodb-5.0-ss982, -ss998, -ss1003
Fixes:
- Bug #15815: Very poor performance with multiple queries running concurrently
- Bug #22868: 'Thread thrashing' with > 50 concurrent conns under an upd-intensive workloadw
- Bug #23769: Debug assertion failure with innodb_locks_unsafe_for_binlog
- Bug #24089: Race condition in fil_flush_file_spaces()
innobase/buf/buf0buf.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/buf/buf0flu.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/buf/buf0lru.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/dict/dict0crea.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
innobase/fil/fil0fil.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1003:
branches/5.0: Merge r1002 from trunk:
fil_flush_file_spaces(): Copy the system->unflushed_spaces list to an
array while holding the mutex. This removes the crash-triggering
race condition that was introduced when fixing Bug 15653. (Bug #24089)
innobase/include/buf0buf.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/include/buf0buf.ic:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/include/dict0crea.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
innobase/include/sync0arr.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/include/sync0rw.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/include/sync0rw.ic:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/include/sync0sync.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/os/os0sync.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/row/row0mysql.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
innobase/row/row0sel.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r982:
branches/5.0: row_sel(): Do not try to acquire a LOCK_REC_NOT_GAP lock
on the supremum record. Instead, skip to the next record. (Bug #23769)
This fix was backported from r623 in the 5.1 tree.
innobase/srv/srv0start.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r926:
Refer to bug: 22268. Since no one tries to run 5.0 on Windows 95/ME it was
decided to raise the limit of srv_max_n_threads to 10000 on Windows.
innobase/sync/sync0arr.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/sync/sync0rw.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/sync/sync0sync.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r969:
branches/5.0: Port r968 from trunk:
sync_thread_add_level(): When level == SYNC_TREE_NODE, allow the latching
order to be violated if the thread holds dict_operation_lock, whose level is
SYNC_DICT_OPERATION. This removes the assertion failure of TRUNCATE TABLE
#ifdef UNIV_SYNC_DEBUG.
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
2006-11-09 05:02:37 +01:00
|
|
|
lock->event = os_event_create(NULL);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
mutex_enter(&rw_lock_list_mutex);
|
2003-10-07 16:28:59 +02:00
|
|
|
|
|
|
|
if (UT_LIST_GET_LEN(rw_lock_list) > 0) {
|
|
|
|
ut_a(UT_LIST_GET_FIRST(rw_lock_list)->magic_n
|
|
|
|
== RW_LOCK_MAGIC_N);
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
UT_LIST_ADD_FIRST(list, rw_lock_list, lock);
|
|
|
|
|
|
|
|
mutex_exit(&rw_lock_list_mutex);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Calling this function is obligatory only if the memory buffer containing
|
|
|
|
the rw-lock is freed. Removes an rw-lock object from the global list. The
|
|
|
|
rw-lock is checked to be in the non-locked state. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_free(
|
|
|
|
/*=========*/
|
|
|
|
rw_lock_t* lock) /* in: rw-lock */
|
|
|
|
{
|
2004-04-27 14:33:40 +02:00
|
|
|
#ifdef UNIV_DEBUG
|
2003-10-07 16:28:59 +02:00
|
|
|
ut_a(rw_lock_validate(lock));
|
2004-04-27 14:33:40 +02:00
|
|
|
#endif /* UNIV_DEBUG */
|
2001-02-17 13:19:19 +01:00
|
|
|
ut_a(rw_lock_get_writer(lock) == RW_LOCK_NOT_LOCKED);
|
|
|
|
ut_a(rw_lock_get_waiters(lock) == 0);
|
|
|
|
ut_a(rw_lock_get_reader_count(lock) == 0);
|
|
|
|
|
|
|
|
lock->magic_n = 0;
|
|
|
|
|
|
|
|
mutex_free(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
mutex_enter(&rw_lock_list_mutex);
|
This ChangeSet must be null-merged to 5.1. Applied innodb-5.0-ss982, -ss998, -ss1003
Fixes:
- Bug #15815: Very poor performance with multiple queries running concurrently
- Bug #22868: 'Thread thrashing' with > 50 concurrent conns under an upd-intensive workloadw
- Bug #23769: Debug assertion failure with innodb_locks_unsafe_for_binlog
- Bug #24089: Race condition in fil_flush_file_spaces()
innobase/buf/buf0buf.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/buf/buf0flu.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/buf/buf0lru.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/dict/dict0crea.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
innobase/fil/fil0fil.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1003:
branches/5.0: Merge r1002 from trunk:
fil_flush_file_spaces(): Copy the system->unflushed_spaces list to an
array while holding the mutex. This removes the crash-triggering
race condition that was introduced when fixing Bug 15653. (Bug #24089)
innobase/include/buf0buf.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/include/buf0buf.ic:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1000:
branches/5.0: Merge r999 from trunk:
Reduce buffer pool mutex contention under >= 4 big concurrent
CPU-bound SELECT queries. (Bug #22868)
Fix: replace the mutex by one mutex protecting the 'flush list'
(and the free list) and several mutexes protecting portions of the
buffer pool, where we keep several indivudual LRU lists of pages.
This patch is from Sunny Bains and Heikki Tuuri.
innobase/include/dict0crea.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
innobase/include/sync0arr.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/include/sync0rw.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/include/sync0rw.ic:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/include/sync0sync.h:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/os/os0sync.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/row/row0mysql.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
innobase/row/row0sel.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r982:
branches/5.0: row_sel(): Do not try to acquire a LOCK_REC_NOT_GAP lock
on the supremum record. Instead, skip to the next record. (Bug #23769)
This fix was backported from r623 in the 5.1 tree.
innobase/srv/srv0start.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r926:
Refer to bug: 22268. Since no one tries to run 5.0 on Windows 95/ME it was
decided to raise the limit of srv_max_n_threads to 10000 on Windows.
innobase/sync/sync0arr.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/sync/sync0rw.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
innobase/sync/sync0sync.c:
Applied innodb-5.0-ss982, -ss998, -ss1003
Revision r969:
branches/5.0: Port r968 from trunk:
sync_thread_add_level(): When level == SYNC_TREE_NODE, allow the latching
order to be violated if the thread holds dict_operation_lock, whose level is
SYNC_DICT_OPERATION. This removes the assertion failure of TRUNCATE TABLE
#ifdef UNIV_SYNC_DEBUG.
Revision r974:
branches/5.0: Port r973 from trunk.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.
Revision r1001:
branches/5.0: Reduce locking contention:
Bug #15815: 'Thread thrashing' with > 50 concurrent connections under
an update-intensive workload.
Fix: Introduce one event per InnoDB semaphore.
This patch is from Sunny Bains and Heikki Tuuri.
This patch will not be merged to trunk (MySQL/InnoDB 5.1) yet,
because it tries to address the problem in a different way.
2006-11-09 05:02:37 +01:00
|
|
|
os_event_free(lock->event);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2003-10-07 16:28:59 +02:00
|
|
|
if (UT_LIST_GET_PREV(list, lock)) {
|
|
|
|
ut_a(UT_LIST_GET_PREV(list, lock)->magic_n == RW_LOCK_MAGIC_N);
|
|
|
|
}
|
|
|
|
if (UT_LIST_GET_NEXT(list, lock)) {
|
|
|
|
ut_a(UT_LIST_GET_NEXT(list, lock)->magic_n == RW_LOCK_MAGIC_N);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
UT_LIST_REMOVE(list, rw_lock_list, lock);
|
|
|
|
|
|
|
|
mutex_exit(&rw_lock_list_mutex);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Checks that the rw-lock has been initialized and that there are no
|
|
|
|
simultaneous shared and exclusive locks. */
|
|
|
|
|
|
|
|
ibool
|
|
|
|
rw_lock_validate(
|
|
|
|
/*=============*/
|
|
|
|
rw_lock_t* lock)
|
|
|
|
{
|
|
|
|
ut_a(lock);
|
|
|
|
|
|
|
|
mutex_enter(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
ut_a(lock->magic_n == RW_LOCK_MAGIC_N);
|
|
|
|
ut_a((rw_lock_get_reader_count(lock) == 0)
|
|
|
|
|| (rw_lock_get_writer(lock) != RW_LOCK_EX));
|
|
|
|
ut_a((rw_lock_get_writer(lock) == RW_LOCK_EX)
|
|
|
|
|| (rw_lock_get_writer(lock) == RW_LOCK_WAIT_EX)
|
|
|
|
|| (rw_lock_get_writer(lock) == RW_LOCK_NOT_LOCKED));
|
|
|
|
ut_a((rw_lock_get_waiters(lock) == 0)
|
|
|
|
|| (rw_lock_get_waiters(lock) == 1));
|
|
|
|
ut_a((lock->writer != RW_LOCK_EX) || (lock->writer_count > 0));
|
|
|
|
|
|
|
|
mutex_exit(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
return(TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Lock an rw-lock in shared mode for the current thread. If the rw-lock is
|
|
|
|
locked in exclusive mode, or there is an exclusive lock request waiting,
|
|
|
|
the function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
|
|
|
|
for the lock, before suspending the thread. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_s_lock_spin(
|
|
|
|
/*================*/
|
2001-10-10 21:47:08 +02:00
|
|
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
|
|
|
ulint pass, /* in: pass value; != 0, if the lock
|
2001-02-17 13:19:19 +01:00
|
|
|
will be passed to another thread to unlock */
|
2004-05-14 15:06:21 +02:00
|
|
|
const char* file_name, /* in: file name where lock requested */
|
2001-10-10 21:47:08 +02:00
|
|
|
ulint line) /* in: line where requested */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
|
|
|
ulint index; /* index of the reserved wait cell */
|
|
|
|
ulint i; /* spin round count */
|
|
|
|
|
|
|
|
ut_ad(rw_lock_validate(lock));
|
|
|
|
|
|
|
|
lock_loop:
|
|
|
|
rw_s_spin_wait_count++;
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
/* Spin waiting for the writer field to become free */
|
2001-02-17 13:19:19 +01:00
|
|
|
i = 0;
|
|
|
|
|
|
|
|
while (rw_lock_get_writer(lock) != RW_LOCK_NOT_LOCKED
|
|
|
|
&& i < SYNC_SPIN_ROUNDS) {
|
|
|
|
if (srv_spin_wait_delay) {
|
|
|
|
ut_delay(ut_rnd_interval(0, srv_spin_wait_delay));
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (i == SYNC_SPIN_ROUNDS) {
|
|
|
|
os_thread_yield();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (srv_print_latch_waits) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr,
|
|
|
|
"Thread %lu spin wait rw-s-lock at %p cfile %s cline %lu rnds %lu\n",
|
2004-04-26 14:53:31 +02:00
|
|
|
(ulong) os_thread_pf(os_thread_get_curr_id()), lock,
|
2003-12-20 02:41:04 +01:00
|
|
|
lock->cfile_name, (ulong) lock->cline, (ulong) i);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
mutex_enter(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
/* We try once again to obtain the lock */
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
if (TRUE == rw_lock_s_lock_low(lock, pass, file_name, line)) {
|
2001-02-17 13:19:19 +01:00
|
|
|
mutex_exit(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
return; /* Success */
|
|
|
|
} else {
|
|
|
|
/* If we get here, locking did not succeed, we may
|
|
|
|
suspend the thread to wait in the wait array */
|
|
|
|
|
|
|
|
rw_s_system_call_count++;
|
|
|
|
|
|
|
|
sync_array_reserve_cell(sync_primary_wait_array,
|
|
|
|
lock, RW_LOCK_SHARED,
|
|
|
|
file_name, line,
|
|
|
|
&index);
|
|
|
|
|
|
|
|
rw_lock_set_waiters(lock, 1);
|
|
|
|
|
|
|
|
mutex_exit(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
if (srv_print_latch_waits) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr,
|
|
|
|
"Thread %lu OS wait rw-s-lock at %p cfile %s cline %lu\n",
|
2004-04-26 14:53:31 +02:00
|
|
|
os_thread_pf(os_thread_get_curr_id()),
|
|
|
|
lock, lock->cfile_name, (ulong) lock->cline);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
rw_s_system_call_count++;
|
2001-10-10 21:47:08 +02:00
|
|
|
rw_s_os_wait_count++;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
sync_array_wait_event(sync_primary_wait_array, index);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
goto lock_loop;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
This function is used in the insert buffer to move the ownership of an
|
|
|
|
x-latch on a buffer frame to the current thread. The x-latch was set by
|
|
|
|
the buffer read operation and it protected the buffer frame while the
|
|
|
|
read was done. The ownership is moved because we want that the current
|
|
|
|
thread is able to acquire a second x-latch which is stored in an mtr.
|
|
|
|
This, in turn, is needed to pass the debug checks of index page
|
|
|
|
operations. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_x_lock_move_ownership(
|
|
|
|
/*==========================*/
|
|
|
|
rw_lock_t* lock) /* in: lock which was x-locked in the
|
|
|
|
buffer read */
|
|
|
|
{
|
|
|
|
ut_ad(rw_lock_is_locked(lock, RW_LOCK_EX));
|
|
|
|
|
|
|
|
mutex_enter(&(lock->mutex));
|
|
|
|
|
|
|
|
lock->writer_thread = os_thread_get_curr_id();
|
|
|
|
|
|
|
|
lock->pass = 0;
|
|
|
|
|
|
|
|
mutex_exit(&(lock->mutex));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Low-level function for acquiring an exclusive lock. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
rw_lock_x_lock_low(
|
|
|
|
/*===============*/
|
|
|
|
/* out: RW_LOCK_NOT_LOCKED if did
|
|
|
|
not succeed, RW_LOCK_EX if success,
|
|
|
|
RW_LOCK_WAIT_EX, if got wait reservation */
|
|
|
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
2001-10-10 21:47:08 +02:00
|
|
|
ulint pass, /* in: pass value; != 0, if the lock will
|
2001-02-17 13:19:19 +01:00
|
|
|
be passed to another thread to unlock */
|
2004-05-14 15:06:21 +02:00
|
|
|
const char* file_name,/* in: file name where lock requested */
|
2001-10-10 21:47:08 +02:00
|
|
|
ulint line) /* in: line where requested */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
2004-03-12 16:14:51 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
ut_ad(mutex_own(rw_lock_get_mutex(lock)));
|
2004-03-12 16:14:51 +01:00
|
|
|
#endif /* UNIV_SYNC_DEBUG */
|
2001-02-17 13:19:19 +01:00
|
|
|
if (rw_lock_get_writer(lock) == RW_LOCK_NOT_LOCKED) {
|
|
|
|
|
|
|
|
if (rw_lock_get_reader_count(lock) == 0) {
|
|
|
|
|
|
|
|
rw_lock_set_writer(lock, RW_LOCK_EX);
|
|
|
|
lock->writer_thread = os_thread_get_curr_id();
|
|
|
|
lock->writer_count++;
|
|
|
|
lock->pass = pass;
|
|
|
|
|
2004-02-19 10:40:36 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
rw_lock_add_debug_info(lock, pass, RW_LOCK_EX,
|
|
|
|
file_name, line);
|
2004-02-19 10:40:36 +01:00
|
|
|
#endif
|
2001-10-10 21:47:08 +02:00
|
|
|
lock->last_x_file_name = file_name;
|
|
|
|
lock->last_x_line = line;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
/* Locking succeeded, we may return */
|
|
|
|
return(RW_LOCK_EX);
|
|
|
|
} else {
|
|
|
|
/* There are readers, we have to wait */
|
|
|
|
rw_lock_set_writer(lock, RW_LOCK_WAIT_EX);
|
|
|
|
lock->writer_thread = os_thread_get_curr_id();
|
|
|
|
lock->pass = pass;
|
|
|
|
lock->writer_is_wait_ex = TRUE;
|
|
|
|
|
2004-02-19 10:40:36 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
rw_lock_add_debug_info(lock, pass, RW_LOCK_WAIT_EX,
|
|
|
|
file_name, line);
|
2004-02-19 10:40:36 +01:00
|
|
|
#endif
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
return(RW_LOCK_WAIT_EX);
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if ((rw_lock_get_writer(lock) == RW_LOCK_WAIT_EX)
|
2002-08-06 21:59:13 +02:00
|
|
|
&& os_thread_eq(lock->writer_thread,
|
|
|
|
os_thread_get_curr_id())) {
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
if (rw_lock_get_reader_count(lock) == 0) {
|
|
|
|
|
|
|
|
rw_lock_set_writer(lock, RW_LOCK_EX);
|
|
|
|
lock->writer_count++;
|
|
|
|
lock->pass = pass;
|
|
|
|
lock->writer_is_wait_ex = FALSE;
|
|
|
|
|
2004-02-19 10:40:36 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
rw_lock_remove_debug_info(lock, pass, RW_LOCK_WAIT_EX);
|
|
|
|
rw_lock_add_debug_info(lock, pass, RW_LOCK_EX,
|
|
|
|
file_name, line);
|
2004-02-19 10:40:36 +01:00
|
|
|
#endif
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
lock->last_x_file_name = file_name;
|
|
|
|
lock->last_x_line = line;
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/* Locking succeeded, we may return */
|
|
|
|
return(RW_LOCK_EX);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(RW_LOCK_WAIT_EX);
|
|
|
|
|
|
|
|
} else if ((rw_lock_get_writer(lock) == RW_LOCK_EX)
|
2002-08-06 21:59:13 +02:00
|
|
|
&& os_thread_eq(lock->writer_thread,
|
|
|
|
os_thread_get_curr_id())
|
2001-02-17 13:19:19 +01:00
|
|
|
&& (lock->pass == 0)
|
|
|
|
&& (pass == 0)) {
|
|
|
|
|
|
|
|
lock->writer_count++;
|
|
|
|
|
2004-02-19 10:40:36 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
rw_lock_add_debug_info(lock, pass, RW_LOCK_EX, file_name,
|
|
|
|
line);
|
2004-02-19 10:40:36 +01:00
|
|
|
#endif
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
lock->last_x_file_name = file_name;
|
|
|
|
lock->last_x_line = line;
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/* Locking succeeded, we may return */
|
|
|
|
return(RW_LOCK_EX);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Locking did not succeed */
|
|
|
|
return(RW_LOCK_NOT_LOCKED);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
NOTE! Use the corresponding macro, not directly this function! Lock an
|
|
|
|
rw-lock in exclusive mode for the current thread. If the rw-lock is locked
|
|
|
|
in shared or exclusive mode, or there is an exclusive lock request waiting,
|
|
|
|
the function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
|
|
|
|
for the lock before suspending the thread. If the same thread has an x-lock
|
|
|
|
on the rw-lock, locking succeed, with the following exception: if pass != 0,
|
|
|
|
only a single x-lock may be taken on the lock. NOTE: If the same thread has
|
|
|
|
an s-lock, locking does not succeed! */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_x_lock_func(
|
|
|
|
/*================*/
|
|
|
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
2001-10-10 21:47:08 +02:00
|
|
|
ulint pass, /* in: pass value; != 0, if the lock will
|
2001-02-17 13:19:19 +01:00
|
|
|
be passed to another thread to unlock */
|
2004-05-14 15:06:21 +02:00
|
|
|
const char* file_name,/* in: file name where lock requested */
|
2001-10-10 21:47:08 +02:00
|
|
|
ulint line) /* in: line where requested */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
|
|
|
ulint index; /* index of the reserved wait cell */
|
|
|
|
ulint state; /* lock state acquired */
|
|
|
|
ulint i; /* spin round count */
|
|
|
|
|
|
|
|
ut_ad(rw_lock_validate(lock));
|
|
|
|
|
|
|
|
lock_loop:
|
|
|
|
/* Acquire the mutex protecting the rw-lock fields */
|
|
|
|
mutex_enter_fast(&(lock->mutex));
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
state = rw_lock_x_lock_low(lock, pass, file_name, line);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
mutex_exit(&(lock->mutex));
|
|
|
|
|
|
|
|
if (state == RW_LOCK_EX) {
|
|
|
|
|
|
|
|
return; /* Locking succeeded */
|
|
|
|
|
|
|
|
} else if (state == RW_LOCK_NOT_LOCKED) {
|
|
|
|
|
|
|
|
/* Spin waiting for the writer field to become free */
|
|
|
|
i = 0;
|
|
|
|
|
|
|
|
while (rw_lock_get_writer(lock) != RW_LOCK_NOT_LOCKED
|
|
|
|
&& i < SYNC_SPIN_ROUNDS) {
|
|
|
|
if (srv_spin_wait_delay) {
|
|
|
|
ut_delay(ut_rnd_interval(0,
|
|
|
|
srv_spin_wait_delay));
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
if (i == SYNC_SPIN_ROUNDS) {
|
|
|
|
os_thread_yield();
|
|
|
|
}
|
|
|
|
} else if (state == RW_LOCK_WAIT_EX) {
|
|
|
|
|
|
|
|
/* Spin waiting for the reader count field to become zero */
|
|
|
|
i = 0;
|
|
|
|
|
|
|
|
while (rw_lock_get_reader_count(lock) != 0
|
|
|
|
&& i < SYNC_SPIN_ROUNDS) {
|
|
|
|
if (srv_spin_wait_delay) {
|
|
|
|
ut_delay(ut_rnd_interval(0,
|
|
|
|
srv_spin_wait_delay));
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
if (i == SYNC_SPIN_ROUNDS) {
|
|
|
|
os_thread_yield();
|
|
|
|
}
|
|
|
|
} else {
|
2001-10-10 21:47:08 +02:00
|
|
|
i = 0; /* Eliminate a compiler warning */
|
2001-02-17 13:19:19 +01:00
|
|
|
ut_error;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (srv_print_latch_waits) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr,
|
|
|
|
"Thread %lu spin wait rw-x-lock at %p cfile %s cline %lu rnds %lu\n",
|
|
|
|
os_thread_pf(os_thread_get_curr_id()), lock,
|
2003-12-20 02:41:04 +01:00
|
|
|
lock->cfile_name, (ulong) lock->cline, (ulong) i);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
rw_x_spin_wait_count++;
|
|
|
|
|
|
|
|
/* We try once again to obtain the lock. Acquire the mutex protecting
|
|
|
|
the rw-lock fields */
|
|
|
|
|
|
|
|
mutex_enter(rw_lock_get_mutex(lock));
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
state = rw_lock_x_lock_low(lock, pass, file_name, line);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
if (state == RW_LOCK_EX) {
|
|
|
|
mutex_exit(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
return; /* Locking succeeded */
|
|
|
|
}
|
|
|
|
|
|
|
|
rw_x_system_call_count++;
|
|
|
|
|
|
|
|
sync_array_reserve_cell(sync_primary_wait_array,
|
|
|
|
lock, RW_LOCK_EX,
|
|
|
|
file_name, line,
|
|
|
|
&index);
|
|
|
|
|
|
|
|
rw_lock_set_waiters(lock, 1);
|
|
|
|
|
|
|
|
mutex_exit(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
if (srv_print_latch_waits) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr,
|
|
|
|
"Thread %lu OS wait for rw-x-lock at %p cfile %s cline %lu\n",
|
|
|
|
os_thread_pf(os_thread_get_curr_id()), lock,
|
2003-12-20 02:41:04 +01:00
|
|
|
lock->cfile_name, (ulong) lock->cline);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
rw_x_system_call_count++;
|
2001-10-10 21:47:08 +02:00
|
|
|
rw_x_os_wait_count++;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
sync_array_wait_event(sync_primary_wait_array, index);
|
|
|
|
|
|
|
|
goto lock_loop;
|
|
|
|
}
|
|
|
|
|
2004-03-12 16:14:51 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
/**********************************************************************
|
|
|
|
Acquires the debug mutex. We cannot use the mutex defined in sync0sync,
|
|
|
|
because the debug mutex is also acquired in sync0arr while holding the OS
|
|
|
|
mutex protecting the sync array, and the ordinary mutex_enter might
|
|
|
|
recursively call routines in sync0arr, leading to a deadlock on the OS
|
|
|
|
mutex. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_debug_mutex_enter(void)
|
|
|
|
/*==========================*/
|
|
|
|
{
|
|
|
|
loop:
|
2001-10-10 21:47:08 +02:00
|
|
|
if (0 == mutex_enter_nowait(&rw_lock_debug_mutex,
|
2004-05-14 15:06:21 +02:00
|
|
|
__FILE__, __LINE__)) {
|
2001-02-17 13:19:19 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
os_event_reset(rw_lock_debug_event);
|
|
|
|
|
|
|
|
rw_lock_debug_waiters = TRUE;
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
if (0 == mutex_enter_nowait(&rw_lock_debug_mutex,
|
2004-05-14 15:06:21 +02:00
|
|
|
__FILE__, __LINE__)) {
|
2001-02-17 13:19:19 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
os_event_wait(rw_lock_debug_event);
|
|
|
|
|
|
|
|
goto loop;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Releases the debug mutex. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_debug_mutex_exit(void)
|
|
|
|
/*==========================*/
|
|
|
|
{
|
|
|
|
mutex_exit(&rw_lock_debug_mutex);
|
|
|
|
|
|
|
|
if (rw_lock_debug_waiters) {
|
|
|
|
rw_lock_debug_waiters = FALSE;
|
|
|
|
os_event_set(rw_lock_debug_event);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Inserts the debug information for an rw-lock. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_add_debug_info(
|
|
|
|
/*===================*/
|
|
|
|
rw_lock_t* lock, /* in: rw-lock */
|
|
|
|
ulint pass, /* in: pass value */
|
|
|
|
ulint lock_type, /* in: lock type */
|
2004-05-27 14:27:43 +02:00
|
|
|
const char* file_name, /* in: file where requested */
|
2001-02-17 13:19:19 +01:00
|
|
|
ulint line) /* in: line where requested */
|
|
|
|
{
|
|
|
|
rw_lock_debug_t* info;
|
|
|
|
|
|
|
|
ut_ad(lock);
|
|
|
|
ut_ad(file_name);
|
|
|
|
|
|
|
|
info = rw_lock_debug_create();
|
|
|
|
|
|
|
|
rw_lock_debug_mutex_enter();
|
|
|
|
|
|
|
|
info->file_name = file_name;
|
|
|
|
info->line = line;
|
|
|
|
info->lock_type = lock_type;
|
|
|
|
info->thread_id = os_thread_get_curr_id();
|
|
|
|
info->pass = pass;
|
|
|
|
|
|
|
|
UT_LIST_ADD_FIRST(list, lock->debug_list, info);
|
|
|
|
|
|
|
|
rw_lock_debug_mutex_exit();
|
|
|
|
|
|
|
|
if ((pass == 0) && (lock_type != RW_LOCK_WAIT_EX)) {
|
|
|
|
sync_thread_add_level(lock, lock->level);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Removes a debug information struct for an rw-lock. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_remove_debug_info(
|
|
|
|
/*======================*/
|
|
|
|
rw_lock_t* lock, /* in: rw-lock */
|
|
|
|
ulint pass, /* in: pass value */
|
|
|
|
ulint lock_type) /* in: lock type */
|
|
|
|
{
|
|
|
|
rw_lock_debug_t* info;
|
|
|
|
|
|
|
|
ut_ad(lock);
|
|
|
|
|
|
|
|
if ((pass == 0) && (lock_type != RW_LOCK_WAIT_EX)) {
|
|
|
|
sync_thread_reset_level(lock);
|
|
|
|
}
|
|
|
|
|
|
|
|
rw_lock_debug_mutex_enter();
|
|
|
|
|
|
|
|
info = UT_LIST_GET_FIRST(lock->debug_list);
|
|
|
|
|
|
|
|
while (info != NULL) {
|
|
|
|
if ((pass == info->pass)
|
|
|
|
&& ((pass != 0)
|
2002-08-06 21:59:13 +02:00
|
|
|
|| os_thread_eq(info->thread_id,
|
|
|
|
os_thread_get_curr_id()))
|
2001-02-17 13:19:19 +01:00
|
|
|
&& (info->lock_type == lock_type)) {
|
|
|
|
|
|
|
|
/* Found! */
|
|
|
|
UT_LIST_REMOVE(list, lock->debug_list, info);
|
|
|
|
rw_lock_debug_mutex_exit();
|
|
|
|
|
|
|
|
rw_lock_debug_free(info);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
info = UT_LIST_GET_NEXT(list, info);
|
|
|
|
}
|
|
|
|
|
|
|
|
ut_error;
|
|
|
|
}
|
2004-03-12 16:14:51 +01:00
|
|
|
#endif /* UNIV_SYNC_DEBUG */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Sets the rw-lock latching level field. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_set_level(
|
|
|
|
/*==============*/
|
|
|
|
rw_lock_t* lock, /* in: rw-lock */
|
|
|
|
ulint level) /* in: level */
|
|
|
|
{
|
|
|
|
lock->level = level;
|
|
|
|
}
|
|
|
|
|
2004-03-12 16:14:51 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
/**********************************************************************
|
|
|
|
Checks if the thread has locked the rw-lock in the specified mode, with
|
|
|
|
the pass value == 0. */
|
|
|
|
|
|
|
|
ibool
|
|
|
|
rw_lock_own(
|
|
|
|
/*========*/
|
|
|
|
/* out: TRUE if locked */
|
|
|
|
rw_lock_t* lock, /* in: rw-lock */
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
ulint lock_type) /* in: lock type: RW_LOCK_SHARED,
|
|
|
|
RW_LOCK_EX */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
|
|
|
rw_lock_debug_t* info;
|
|
|
|
|
|
|
|
ut_ad(lock);
|
|
|
|
ut_ad(rw_lock_validate(lock));
|
|
|
|
|
|
|
|
mutex_enter(&(lock->mutex));
|
|
|
|
|
|
|
|
info = UT_LIST_GET_FIRST(lock->debug_list);
|
|
|
|
|
|
|
|
while (info != NULL) {
|
|
|
|
|
2002-08-06 21:59:13 +02:00
|
|
|
if (os_thread_eq(info->thread_id, os_thread_get_curr_id())
|
2001-02-17 13:19:19 +01:00
|
|
|
&& (info->pass == 0)
|
|
|
|
&& (info->lock_type == lock_type)) {
|
|
|
|
|
|
|
|
mutex_exit(&(lock->mutex));
|
|
|
|
/* Found! */
|
|
|
|
|
|
|
|
return(TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
info = UT_LIST_GET_NEXT(list, info);
|
|
|
|
}
|
|
|
|
mutex_exit(&(lock->mutex));
|
|
|
|
|
|
|
|
return(FALSE);
|
|
|
|
}
|
2004-03-12 16:14:51 +01:00
|
|
|
#endif /* UNIV_SYNC_DEBUG */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Checks if somebody has locked the rw-lock in the specified mode. */
|
|
|
|
|
|
|
|
ibool
|
|
|
|
rw_lock_is_locked(
|
|
|
|
/*==============*/
|
|
|
|
/* out: TRUE if locked */
|
|
|
|
rw_lock_t* lock, /* in: rw-lock */
|
|
|
|
ulint lock_type) /* in: lock type: RW_LOCK_SHARED,
|
|
|
|
RW_LOCK_EX */
|
|
|
|
{
|
|
|
|
ibool ret = FALSE;
|
|
|
|
|
|
|
|
ut_ad(lock);
|
|
|
|
ut_ad(rw_lock_validate(lock));
|
|
|
|
|
|
|
|
mutex_enter(&(lock->mutex));
|
|
|
|
|
|
|
|
if (lock_type == RW_LOCK_SHARED) {
|
|
|
|
if (lock->reader_count > 0) {
|
|
|
|
ret = TRUE;
|
|
|
|
}
|
|
|
|
} else if (lock_type == RW_LOCK_EX) {
|
|
|
|
if (lock->writer == RW_LOCK_EX) {
|
|
|
|
ret = TRUE;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
ut_error;
|
|
|
|
}
|
|
|
|
|
|
|
|
mutex_exit(&(lock->mutex));
|
|
|
|
|
|
|
|
return(ret);
|
|
|
|
}
|
|
|
|
|
2004-03-12 16:14:51 +01:00
|
|
|
#ifdef UNIV_SYNC_DEBUG
|
2001-02-17 13:19:19 +01:00
|
|
|
/*******************************************************************
|
|
|
|
Prints debug info of currently locked rw-locks. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_list_print_info(void)
|
|
|
|
/*=========================*/
|
|
|
|
{
|
|
|
|
rw_lock_t* lock;
|
|
|
|
ulint count = 0;
|
|
|
|
rw_lock_debug_t* info;
|
|
|
|
|
|
|
|
mutex_enter(&rw_lock_list_mutex);
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fputs("-------------\n"
|
|
|
|
"RW-LATCH INFO\n"
|
|
|
|
"-------------\n", stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
lock = UT_LIST_GET_FIRST(rw_lock_list);
|
|
|
|
|
|
|
|
while (lock != NULL) {
|
|
|
|
|
|
|
|
count++;
|
|
|
|
|
|
|
|
mutex_enter(&(lock->mutex));
|
|
|
|
|
|
|
|
if ((rw_lock_get_writer(lock) != RW_LOCK_NOT_LOCKED)
|
|
|
|
|| (rw_lock_get_reader_count(lock) != 0)
|
|
|
|
|| (rw_lock_get_waiters(lock) != 0)) {
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr, "RW-LOCK: %p ", lock);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
if (rw_lock_get_waiters(lock)) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fputs(" Waiters for the lock exist\n", stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
putc('\n', stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
info = UT_LIST_GET_FIRST(lock->debug_list);
|
|
|
|
while (info != NULL) {
|
|
|
|
rw_lock_debug_print(info);
|
|
|
|
info = UT_LIST_GET_NEXT(list, info);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
mutex_exit(&(lock->mutex));
|
|
|
|
lock = UT_LIST_GET_NEXT(list, lock);
|
|
|
|
}
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr, "Total number of rw-locks %ld\n", count);
|
2001-02-17 13:19:19 +01:00
|
|
|
mutex_exit(&rw_lock_list_mutex);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
Prints debug info of an rw-lock. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_print(
|
|
|
|
/*==========*/
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
rw_lock_t* lock) /* in: rw-lock */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
|
|
|
rw_lock_debug_t* info;
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr,
|
|
|
|
"-------------\n"
|
|
|
|
"RW-LATCH INFO\n"
|
|
|
|
"RW-LATCH: %p ", lock);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
if ((rw_lock_get_writer(lock) != RW_LOCK_NOT_LOCKED)
|
|
|
|
|| (rw_lock_get_reader_count(lock) != 0)
|
|
|
|
|| (rw_lock_get_waiters(lock) != 0)) {
|
|
|
|
|
|
|
|
if (rw_lock_get_waiters(lock)) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fputs(" Waiters for the lock exist\n", stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
putc('\n', stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
info = UT_LIST_GET_FIRST(lock->debug_list);
|
|
|
|
while (info != NULL) {
|
|
|
|
rw_lock_debug_print(info);
|
|
|
|
info = UT_LIST_GET_NEXT(list, info);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Prints info of a debug struct. */
|
|
|
|
|
|
|
|
void
|
|
|
|
rw_lock_debug_print(
|
|
|
|
/*================*/
|
|
|
|
rw_lock_debug_t* info) /* in: debug struct */
|
|
|
|
{
|
|
|
|
ulint rwt;
|
|
|
|
|
|
|
|
rwt = info->lock_type;
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(stderr, "Locked: thread %ld file %s line %ld ",
|
2003-12-20 02:41:04 +01:00
|
|
|
(ulong) os_thread_pf(info->thread_id), info->file_name,
|
|
|
|
(ulong) info->line);
|
2001-02-17 13:19:19 +01:00
|
|
|
if (rwt == RW_LOCK_SHARED) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fputs("S-LOCK", stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else if (rwt == RW_LOCK_EX) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fputs("X-LOCK", stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else if (rwt == RW_LOCK_WAIT_EX) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fputs("WAIT X-LOCK", stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else {
|
|
|
|
ut_error;
|
|
|
|
}
|
|
|
|
if (info->pass != 0) {
|
2004-04-26 14:53:31 +02:00
|
|
|
fprintf(stderr, " pass value %lu", (ulong) info->pass);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
putc('\n', stderr);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
Returns the number of currently locked rw-locks. Works only in the debug
|
|
|
|
version. */
|
|
|
|
|
|
|
|
ulint
|
|
|
|
rw_lock_n_locked(void)
|
|
|
|
/*==================*/
|
|
|
|
{
|
|
|
|
rw_lock_t* lock;
|
|
|
|
ulint count = 0;
|
|
|
|
|
|
|
|
mutex_enter(&rw_lock_list_mutex);
|
|
|
|
|
|
|
|
lock = UT_LIST_GET_FIRST(rw_lock_list);
|
|
|
|
|
|
|
|
while (lock != NULL) {
|
|
|
|
mutex_enter(rw_lock_get_mutex(lock));
|
|
|
|
|
|
|
|
if ((rw_lock_get_writer(lock) != RW_LOCK_NOT_LOCKED)
|
|
|
|
|| (rw_lock_get_reader_count(lock) != 0)) {
|
|
|
|
count++;
|
|
|
|
}
|
|
|
|
|
|
|
|
mutex_exit(rw_lock_get_mutex(lock));
|
|
|
|
lock = UT_LIST_GET_NEXT(list, lock);
|
|
|
|
}
|
|
|
|
|
|
|
|
mutex_exit(&rw_lock_list_mutex);
|
|
|
|
|
|
|
|
return(count);
|
|
|
|
}
|
2004-03-12 16:14:51 +01:00
|
|
|
#endif /* UNIV_SYNC_DEBUG */
|