Commit 359bddbe authored by Marko Mäkelä's avatar Marko Mäkelä

Bug#59579 rw_lock_debug_print outputs to stderr

rw_lock_debug_print(): Add parameter FILE* for specifying the output stream.
rw_lock_list_print_info(): Invoke rw_lock_debug_print() on file, not stderr.
parent 1f3975b4
/****************************************************** /******************************************************
The read-write lock (for threads, not for database transactions) The read-write lock (for threads, not for database transactions)
(c) 1995 Innobase Oy Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
Created 9/11/1995 Heikki Tuuri Created 9/11/1995 Heikki Tuuri
*******************************************************/ *******************************************************/
...@@ -409,6 +409,7 @@ Prints info of a debug struct. */ ...@@ -409,6 +409,7 @@ Prints info of a debug struct. */
void void
rw_lock_debug_print( rw_lock_debug_print(
/*================*/ /*================*/
FILE* f, /* in: output stream */
rw_lock_debug_t* info); /* in: debug struct */ rw_lock_debug_t* info); /* in: debug struct */
#endif /* UNIV_SYNC_DEBUG */ #endif /* UNIV_SYNC_DEBUG */
......
/****************************************************** /******************************************************
The wait array used in synchronization primitives The wait array used in synchronization primitives
(c) 1995 Innobase Oy Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
Created 9/5/1995 Heikki Tuuri Created 9/5/1995 Heikki Tuuri
*******************************************************/ *******************************************************/
...@@ -709,7 +709,7 @@ sync_array_detect_deadlock( ...@@ -709,7 +709,7 @@ sync_array_detect_deadlock(
fprintf(stderr, "rw-lock %p ", fprintf(stderr, "rw-lock %p ",
(void*) lock); (void*) lock);
sync_array_cell_print(stderr, cell); sync_array_cell_print(stderr, cell);
rw_lock_debug_print(debug); rw_lock_debug_print(stderr, debug);
return(TRUE); return(TRUE);
} }
} }
......
/****************************************************** /******************************************************
The read-write lock (for thread synchronization) The read-write lock (for thread synchronization)
(c) 1995 Innobase Oy Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
Created 9/11/1995 Heikki Tuuri Created 9/11/1995 Heikki Tuuri
*******************************************************/ *******************************************************/
...@@ -830,7 +830,7 @@ rw_lock_list_print_info( ...@@ -830,7 +830,7 @@ rw_lock_list_print_info(
info = UT_LIST_GET_FIRST(lock->debug_list); info = UT_LIST_GET_FIRST(lock->debug_list);
while (info != NULL) { while (info != NULL) {
rw_lock_debug_print(info); rw_lock_debug_print(file, info);
info = UT_LIST_GET_NEXT(list, info); info = UT_LIST_GET_NEXT(list, info);
} }
} }
...@@ -870,7 +870,7 @@ rw_lock_print( ...@@ -870,7 +870,7 @@ rw_lock_print(
info = UT_LIST_GET_FIRST(lock->debug_list); info = UT_LIST_GET_FIRST(lock->debug_list);
while (info != NULL) { while (info != NULL) {
rw_lock_debug_print(info); rw_lock_debug_print(stderr, info);
info = UT_LIST_GET_NEXT(list, info); info = UT_LIST_GET_NEXT(list, info);
} }
} }
...@@ -882,28 +882,29 @@ Prints info of a debug struct. */ ...@@ -882,28 +882,29 @@ Prints info of a debug struct. */
void void
rw_lock_debug_print( rw_lock_debug_print(
/*================*/ /*================*/
FILE* f, /* in: output stream */
rw_lock_debug_t* info) /* in: debug struct */ rw_lock_debug_t* info) /* in: debug struct */
{ {
ulint rwt; ulint rwt;
rwt = info->lock_type; rwt = info->lock_type;
fprintf(stderr, "Locked: thread %lu file %s line %lu ", fprintf(f, "Locked: thread %lu file %s line %lu ",
(ulong) os_thread_pf(info->thread_id), info->file_name, (ulong) os_thread_pf(info->thread_id), info->file_name,
(ulong) info->line); (ulong) info->line);
if (rwt == RW_LOCK_SHARED) { if (rwt == RW_LOCK_SHARED) {
fputs("S-LOCK", stderr); fputs("S-LOCK", f);
} else if (rwt == RW_LOCK_EX) { } else if (rwt == RW_LOCK_EX) {
fputs("X-LOCK", stderr); fputs("X-LOCK", f);
} else if (rwt == RW_LOCK_WAIT_EX) { } else if (rwt == RW_LOCK_WAIT_EX) {
fputs("WAIT X-LOCK", stderr); fputs("WAIT X-LOCK", f);
} else { } else {
ut_error; ut_error;
} }
if (info->pass != 0) { if (info->pass != 0) {
fprintf(stderr, " pass value %lu", (ulong) info->pass); fprintf(f, " pass value %lu", (ulong) info->pass);
} }
putc('\n', stderr); putc('\n', f);
} }
/******************************************************************* /*******************************************************************
......
2011-01-18 The InnoDB Team
* include/sync0rw.h, sync/sync0arr.c, sync/sync0rw.c:
Fix Bug#59579 rw_lock_debug_print outputs to stderr, not to
SHOW ENGINE INNODB STATUS
2011-01-14 The InnoDB Team 2011-01-14 The InnoDB Team
* btr/btr0cur.c, dict/dict0dict.c, handler/ha_innodb.cc, * btr/btr0cur.c, dict/dict0dict.c, handler/ha_innodb.cc,
include/btr0cur.h, include/dict0mem.h, include/rem0cmp.h, include/btr0cur.h, include/dict0mem.h, include/rem0cmp.h,
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, Google Inc. Copyright (c) 2008, Google Inc.
Portions of this file contain modifications contributed and copyrighted by Portions of this file contain modifications contributed and copyrighted by
...@@ -490,6 +490,7 @@ UNIV_INTERN ...@@ -490,6 +490,7 @@ UNIV_INTERN
void void
rw_lock_debug_print( rw_lock_debug_print(
/*================*/ /*================*/
FILE* f, /*!< in: output stream */
rw_lock_debug_t* info); /*!< in: debug struct */ rw_lock_debug_t* info); /*!< in: debug struct */
#endif /* UNIV_SYNC_DEBUG */ #endif /* UNIV_SYNC_DEBUG */
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved. Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, Google Inc. Copyright (c) 2008, Google Inc.
Portions of this file contain modifications contributed and copyrighted by Portions of this file contain modifications contributed and copyrighted by
...@@ -715,7 +715,7 @@ sync_array_detect_deadlock( ...@@ -715,7 +715,7 @@ sync_array_detect_deadlock(
fprintf(stderr, "rw-lock %p ", fprintf(stderr, "rw-lock %p ",
(void*) lock); (void*) lock);
sync_array_cell_print(stderr, cell); sync_array_cell_print(stderr, cell);
rw_lock_debug_print(debug); rw_lock_debug_print(stderr, debug);
return(TRUE); return(TRUE);
} }
} }
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved. Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, Google Inc. Copyright (c) 2008, Google Inc.
Portions of this file contain modifications contributed and copyrighted by Portions of this file contain modifications contributed and copyrighted by
...@@ -925,7 +925,7 @@ rw_lock_list_print_info( ...@@ -925,7 +925,7 @@ rw_lock_list_print_info(
info = UT_LIST_GET_FIRST(lock->debug_list); info = UT_LIST_GET_FIRST(lock->debug_list);
while (info != NULL) { while (info != NULL) {
rw_lock_debug_print(info); rw_lock_debug_print(file, info);
info = UT_LIST_GET_NEXT(list, info); info = UT_LIST_GET_NEXT(list, info);
} }
} }
...@@ -973,7 +973,7 @@ rw_lock_print( ...@@ -973,7 +973,7 @@ rw_lock_print(
info = UT_LIST_GET_FIRST(lock->debug_list); info = UT_LIST_GET_FIRST(lock->debug_list);
while (info != NULL) { while (info != NULL) {
rw_lock_debug_print(info); rw_lock_debug_print(stderr, info);
info = UT_LIST_GET_NEXT(list, info); info = UT_LIST_GET_NEXT(list, info);
} }
} }
...@@ -985,28 +985,29 @@ UNIV_INTERN ...@@ -985,28 +985,29 @@ UNIV_INTERN
void void
rw_lock_debug_print( rw_lock_debug_print(
/*================*/ /*================*/
FILE* f, /*!< in: output stream */
rw_lock_debug_t* info) /*!< in: debug struct */ rw_lock_debug_t* info) /*!< in: debug struct */
{ {
ulint rwt; ulint rwt;
rwt = info->lock_type; rwt = info->lock_type;
fprintf(stderr, "Locked: thread %lu file %s line %lu ", fprintf(f, "Locked: thread %lu file %s line %lu ",
(ulong) os_thread_pf(info->thread_id), info->file_name, (ulong) os_thread_pf(info->thread_id), info->file_name,
(ulong) info->line); (ulong) info->line);
if (rwt == RW_LOCK_SHARED) { if (rwt == RW_LOCK_SHARED) {
fputs("S-LOCK", stderr); fputs("S-LOCK", f);
} else if (rwt == RW_LOCK_EX) { } else if (rwt == RW_LOCK_EX) {
fputs("X-LOCK", stderr); fputs("X-LOCK", f);
} else if (rwt == RW_LOCK_WAIT_EX) { } else if (rwt == RW_LOCK_WAIT_EX) {
fputs("WAIT X-LOCK", stderr); fputs("WAIT X-LOCK", f);
} else { } else {
ut_error; ut_error;
} }
if (info->pass != 0) { if (info->pass != 0) {
fprintf(stderr, " pass value %lu", (ulong) info->pass); fprintf(f, " pass value %lu", (ulong) info->pass);
} }
putc('\n', stderr); putc('\n', f);
} }
/***************************************************************//** /***************************************************************//**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment