From 37b5a29dc7b4d85a739b942f617a365dcb4736dc Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Fri, 27 Mar 2009 01:35:56 +0000 Subject: [PATCH] Pass more useful information through to lock tracking when DEBUG_THREADS is on. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@184512 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/heap.h | 13 +++++++++++++ main/heap.c | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/asterisk/heap.h b/include/asterisk/heap.h index 654ec5e1e4..6bf97b4f3d 100644 --- a/include/asterisk/heap.h +++ b/include/asterisk/heap.h @@ -209,6 +209,8 @@ void *ast_heap_peek(struct ast_heap *h, unsigned int index); */ size_t ast_heap_size(struct ast_heap *h); +#ifndef DEBUG_THREADS + /*! * \brief Write-Lock a heap * @@ -247,6 +249,17 @@ int ast_heap_rdlock(struct ast_heap *h); */ int ast_heap_unlock(struct ast_heap *h); +#else /* DEBUG_THREADS */ + +#define ast_heap_wrlock(h) __ast_heap_wrlock(h, __FILE__, __PRETTY_FUNCTION__, __LINE__) +int __ast_heap_wrlock(struct ast_heap *h, const char *file, const char *func, int line); +#define ast_heap_rdlock(h) __ast_heap_rdlock(h, __FILE__, __PRETTY_FUNCTION__, __LINE__) +int __ast_heap_rdlock(struct ast_heap *h, const char *file, const char *func, int line); +#define ast_heap_unlock(h) __ast_heap_unlock(h, __FILE__, __PRETTY_FUNCTION__, __LINE__) +int __ast_heap_unlock(struct ast_heap *h, const char *file, const char *func, int line); + +#endif /* DEBUG_THREADS */ + /*! * \brief Verify that a heap has been properly constructed * diff --git a/main/heap.c b/main/heap.c index e3932d72fb..ace5bc8326 100644 --- a/main/heap.c +++ b/main/heap.c @@ -302,6 +302,8 @@ size_t ast_heap_size(struct ast_heap *h) return h->cur_len; } +#ifndef DEBUG_THREADS + int ast_heap_wrlock(struct ast_heap *h) { return ast_rwlock_wrlock(&h->lock); @@ -317,3 +319,21 @@ int ast_heap_unlock(struct ast_heap *h) return ast_rwlock_unlock(&h->lock); } +#else /* DEBUG_THREADS */ + +int __ast_heap_wrlock(struct ast_heap *h, const char *file, const char *func, int line) +{ + return _ast_rwlock_wrlock(&h->lock, "&h->lock", file, line, func); +} + +int __ast_heap_rdlock(struct ast_heap *h, const char *file, const char *func, int line) +{ + return _ast_rwlock_rdlock(&h->lock, "&h->lock", file, line, func); +} + +int __ast_heap_unlock(struct ast_heap *h, const char *file, const char *func, int line) +{ + return _ast_rwlock_unlock(&h->lock, "&h->lock", file, line, func); +} + +#endif /* DEBUG_THREADS */