summaryrefslogtreecommitdiff
path: root/storage/innobase/sync
diff options
context:
space:
mode:
authorJan Lindström <jplindst@mariadb.org>2014-07-08 18:51:34 +0300
committerJan Lindström <jplindst@mariadb.org>2014-07-08 18:51:34 +0300
commit648fb98eb6834781e5ff7bd13f26e7b3755fdf81 (patch)
treed66302aeb68d7e47ea00c06e50cf70374a6485e9 /storage/innobase/sync
parent2b4b857d51469c5fd974186ba8219e367c2019ec (diff)
downloadmariadb-git-648fb98eb6834781e5ff7bd13f26e7b3755fdf81.tar.gz
MDEV-6348: mariadb crash signal 11
Analysis: sync array output function, should make sure that all used pointers are valid before using them. Merge revision 4225 from lp:maria/5.5.
Diffstat (limited to 'storage/innobase/sync')
-rw-r--r--storage/innobase/sync/sync0arr.cc72
1 files changed, 38 insertions, 34 deletions
diff --git a/storage/innobase/sync/sync0arr.cc b/storage/innobase/sync/sync0arr.cc
index 2cfb693f8ba..8e1b8180eb1 100644
--- a/storage/innobase/sync/sync0arr.cc
+++ b/storage/innobase/sync/sync0arr.cc
@@ -454,19 +454,21 @@ sync_array_cell_print(
been freed meanwhile */
mutex = cell->old_wait_mutex;
- fprintf(file,
- "Mutex at %p created file %s line %lu, lock var %lu\n"
+ if (mutex) {
+ fprintf(file,
+ "Mutex at %p created file %s line %lu, lock var %lu\n"
#ifdef UNIV_SYNC_DEBUG
- "Last time reserved in file %s line %lu, "
+ "Last time reserved in file %s line %lu, "
#endif /* UNIV_SYNC_DEBUG */
- "waiters flag %lu\n",
- (void*) mutex, innobase_basename(mutex->cfile_name),
- (ulong) mutex->cline,
- (ulong) mutex->lock_word,
+ "waiters flag %lu\n",
+ (void*) mutex, innobase_basename(mutex->cfile_name),
+ (ulong) mutex->cline,
+ (ulong) mutex->lock_word,
#ifdef UNIV_SYNC_DEBUG
- mutex->file_name, (ulong) mutex->line,
+ mutex->file_name, (ulong) mutex->line,
#endif /* UNIV_SYNC_DEBUG */
- (ulong) mutex->waiters);
+ (ulong) mutex->waiters);
+ }
} else if (type == RW_LOCK_EX
|| type == RW_LOCK_WAIT_EX
@@ -478,33 +480,35 @@ sync_array_cell_print(
rwlock = cell->old_wait_rw_lock;
- fprintf(file,
- " RW-latch at %p created in file %s line %lu\n",
- (void*) rwlock, innobase_basename(rwlock->cfile_name),
- (ulong) rwlock->cline);
- writer = rw_lock_get_writer(rwlock);
- if (writer != RW_LOCK_NOT_LOCKED) {
+ if (rwlock) {
fprintf(file,
- "a writer (thread id %lu) has"
- " reserved it in mode %s",
- (ulong) os_thread_pf(rwlock->writer_thread),
- writer == RW_LOCK_EX
- ? " exclusive\n"
- : " wait exclusive\n");
- }
+ " RW-latch at %p created in file %s line %lu\n",
+ (void*) rwlock, innobase_basename(rwlock->cfile_name),
+ (ulong) rwlock->cline);
+ writer = rw_lock_get_writer(rwlock);
+ if (writer != RW_LOCK_NOT_LOCKED) {
+ fprintf(file,
+ "a writer (thread id %lu) has"
+ " reserved it in mode %s",
+ (ulong) os_thread_pf(rwlock->writer_thread),
+ writer == RW_LOCK_EX
+ ? " exclusive\n"
+ : " wait exclusive\n");
+ }
- fprintf(file,
- "number of readers %lu, waiters flag %lu, "
- "lock_word: %lx\n"
- "Last time read locked in file %s line %lu\n"
- "Last time write locked in file %s line %lu\n",
- (ulong) rw_lock_get_reader_count(rwlock),
- (ulong) rwlock->waiters,
- rwlock->lock_word,
- innobase_basename(rwlock->last_s_file_name),
- (ulong) rwlock->last_s_line,
- rwlock->last_x_file_name,
- (ulong) rwlock->last_x_line);
+ fprintf(file,
+ "number of readers %lu, waiters flag %lu, "
+ "lock_word: %lx\n"
+ "Last time read locked in file %s line %lu\n"
+ "Last time write locked in file %s line %lu\n",
+ (ulong) rw_lock_get_reader_count(rwlock),
+ (ulong) rwlock->waiters,
+ rwlock->lock_word,
+ innobase_basename(rwlock->last_s_file_name),
+ (ulong) rwlock->last_s_line,
+ rwlock->last_x_file_name,
+ (ulong) rwlock->last_x_line);
+ }
} else {
ut_error;
}