summaryrefslogtreecommitdiff
path: root/utils/check_expr.c
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2008-05-23 22:35:50 +0000
committerMark Michelson <mmichelson@digium.com>2008-05-23 22:35:50 +0000
commit975a848b6783091108c861ee1015cb89fc85f7fe (patch)
treec8d0825b33b156cc9ea02bc81363305f700e8393 /utils/check_expr.c
parent1457c99ea87ab1a5162c7ca07f9fbd446858bd69 (diff)
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: https://origsvn.digium.com/svn/asterisk/trunk@118173 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'utils/check_expr.c')
-rw-r--r--utils/check_expr.c24
1 files changed, 20 insertions, 4 deletions
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;