From: Russell Bryant Date: Fri, 27 Mar 2009 01:36:42 +0000 (+0000) Subject: Merged revisions 184512 via svnmerge from X-Git-Tag: 1.6.1.0-rc4~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d487a76fc8c0cf2522e6197b1c23ed1524cc6a3;p=thirdparty%2Fasterisk.git Merged revisions 184512 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r184512 | russell | 2009-03-26 20:35:56 -0500 (Thu, 26 Mar 2009) | 2 lines Pass more useful information through to lock tracking when DEBUG_THREADS is on. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@184513 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/include/asterisk/heap.h b/include/asterisk/heap.h index 56311ca052..b19dee1e3b 100644 --- a/include/asterisk/heap.h +++ b/include/asterisk/heap.h @@ -198,6 +198,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 * @@ -236,6 +238,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 5e8a2baeff..ee99f99193 100644 --- a/main/heap.c +++ b/main/heap.c @@ -267,6 +267,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); @@ -282,3 +284,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 */