diff options
author | Thomas Hellstrom <[email protected]> | 2011-10-31 12:14:05 +0100 |
---|---|---|
committer | Thomas Hellstrom <[email protected]> | 2011-10-31 13:25:39 +0100 |
commit | 037e7a68f504f019b409ec8cb92f0075019a90f5 (patch) | |
tree | 36dd07707780eea05d902831752bd00b9b744467 | |
parent | 56d30bb00d40cd391d7a469604792a27ddcc459c (diff) |
pipebuffer/debug: Fix a recursive mutex lock
pb_debug_manager_dump was trying to take a lock already
held by all callers.
Signed-off-by: Thomas Hellstrom <[email protected]>
Signed-off-by: Jos� Fonseca <[email protected]>
-rw-r--r-- | src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c index b9237359e6e..2ea63d6cc79 100644 --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c @@ -339,13 +339,11 @@ pb_debug_buffer_vtbl = { static void -pb_debug_manager_dump(struct pb_debug_manager *mgr) +pb_debug_manager_dump_locked(struct pb_debug_manager *mgr) { struct list_head *curr, *next; struct pb_debug_buffer *buf; - pipe_mutex_lock(mgr->mutex); - curr = mgr->list.next; next = curr->next; while(curr != &mgr->list) { @@ -359,7 +357,6 @@ pb_debug_manager_dump(struct pb_debug_manager *mgr) next = curr->next; } - pipe_mutex_unlock(mgr->mutex); } @@ -394,7 +391,7 @@ pb_debug_manager_create_buffer(struct pb_manager *_mgr, pipe_mutex_lock(mgr->mutex); debug_printf("%s: failed to create buffer\n", __FUNCTION__); if(!LIST_IS_EMPTY(&mgr->list)) - pb_debug_manager_dump(mgr); + pb_debug_manager_dump_locked(mgr); pipe_mutex_unlock(mgr->mutex); #endif return NULL; @@ -448,7 +445,7 @@ pb_debug_manager_destroy(struct pb_manager *_mgr) pipe_mutex_lock(mgr->mutex); if(!LIST_IS_EMPTY(&mgr->list)) { debug_printf("%s: unfreed buffers\n", __FUNCTION__); - pb_debug_manager_dump(mgr); + pb_debug_manager_dump_locked(mgr); } pipe_mutex_unlock(mgr->mutex); |