util: add mutex lock in u_debug_memory.c code
The linked list of memory allocations was not protected by a mutex. This lead to sporadic failures with multi-threaded apps. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
810584270d
commit
4a72d859b4
|
@ -38,6 +38,7 @@
|
|||
|
||||
#include "os/os_memory.h"
|
||||
#include "os/os_memory_debug.h"
|
||||
#include "os/os_thread.h"
|
||||
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_debug_stack.h"
|
||||
|
@ -72,6 +73,8 @@ struct debug_memory_footer
|
|||
|
||||
static struct list_head list = { &list, &list };
|
||||
|
||||
pipe_static_mutex(list_mutex);
|
||||
|
||||
static unsigned long last_no = 0;
|
||||
|
||||
|
||||
|
@ -132,7 +135,9 @@ debug_malloc(const char *file, unsigned line, const char *function,
|
|||
ftr = footer_from_header(hdr);
|
||||
ftr->magic = DEBUG_MEMORY_MAGIC;
|
||||
|
||||
pipe_mutex_lock(list_mutex);
|
||||
LIST_ADDTAIL(&hdr->head, &list);
|
||||
pipe_mutex_unlock(list_mutex);
|
||||
|
||||
return data_from_header(hdr);
|
||||
}
|
||||
|
@ -164,7 +169,9 @@ debug_free(const char *file, unsigned line, const char *function,
|
|||
debug_assert(0);
|
||||
}
|
||||
|
||||
pipe_mutex_lock(list_mutex);
|
||||
LIST_DEL(&hdr->head);
|
||||
pipe_mutex_unlock(list_mutex);
|
||||
hdr->magic = 0;
|
||||
ftr->magic = 0;
|
||||
|
||||
|
@ -232,7 +239,9 @@ debug_realloc(const char *file, unsigned line, const char *function,
|
|||
new_ftr = footer_from_header(new_hdr);
|
||||
new_ftr->magic = DEBUG_MEMORY_MAGIC;
|
||||
|
||||
pipe_mutex_lock(list_mutex);
|
||||
LIST_REPLACE(&old_hdr->head, &new_hdr->head);
|
||||
pipe_mutex_unlock(list_mutex);
|
||||
|
||||
/* copy data */
|
||||
new_ptr = data_from_header(new_hdr);
|
||||
|
|
Loading…
Reference in New Issue