From c0ca2a427bbbe205b9fd8d7a2c8b119cb56c6c80 Mon Sep 17 00:00:00 2001 From: mmichelson Date: Fri, 23 May 2008 22:35:50 +0000 Subject: A new feature thanks to the fine folks at Switchvox! If a deadlock is detected, then the typical lock information will be printed along with a backtrace of the stack for the offending threads. Use of this requires compiling with DETECT_DEADLOCKS and having glibc installed. Furthermore, issuing the "core show locks" CLI command will print the normal lock information as well as a backtraces for each lock. This requires that DEBUG_THREADS is enabled and that glibc is installed. All the backtrace features may be disabled by running the configure script with --without-execinfo as an argument git-svn-id: http://svn.digium.com/svn/asterisk/trunk@118173 f38db490-d61c-443f-a65b-d21fe96a405b --- utils/check_expr.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'utils/check_expr.c') diff --git a/utils/check_expr.c b/utils/check_expr.c index 7b013f163..5293acc26 100644 --- a/utils/check_expr.c +++ b/utils/check_expr.c @@ -86,16 +86,25 @@ enum ast_lock_type { }; #endif #if !defined(LOW_MEMORY) +#ifdef HAVE_BKTR void ast_store_lock_info(enum ast_lock_type type, const char *filename, - int line_num, const char *func, const char *lock_name, void *lock_addr); + int line_num, const char *func, const char *lock_name, void *lock_addr, struct ast_bt *bt); void ast_store_lock_info(enum ast_lock_type type, const char *filename, - int line_num, const char *func, const char *lock_name, void *lock_addr) + int line_num, const char *func, const char *lock_name, void *lock_addr, struct ast_bt *bt) { /* not a lot to do in a standalone w/o threading! */ } -void ast_mark_lock_acquired(void *); -void ast_mark_lock_acquired(void *foo) +void ast_remove_lock_info(void *lock_addr, struct ast_bt *bt); +void ast_remove_lock_info(void *lock_addr, struct ast_bt *bt) +{ + /* not a lot to do in a standalone w/o threading! */ +} +#else +void ast_store_lock_info(enum ast_lock_type type, const char *filename, + int line_num, const char *func, const char *lock_name, void *lock_addr); +void ast_store_lock_info(enum ast_lock_type type, const char *filename, + int line_num, const char *func, const char *lock_name, void *lock_addr) { /* not a lot to do in a standalone w/o threading! */ } @@ -105,6 +114,13 @@ void ast_remove_lock_info(void *lock_addr) { /* not a lot to do in a standalone w/o threading! */ } +#endif /* HAVE_BKTR */ + +void ast_mark_lock_acquired(void *); +void ast_mark_lock_acquired(void *foo) +{ + /* not a lot to do in a standalone w/o threading! */ +} #endif static int global_lineno = 1; -- cgit v1.2.3