We have had some tracing tools for mutex but it's not easy to use them for e.g. dead locks. Let's provide "--enable-debug-mutex" parameter when configure to allow QemuMutex to store the last owner that took specific lock. It will be easy to use this tool to debug deadlocks since we can directly know who took the lock then as long as we can have a debugger attached to the process. Reviewed-by: Emilio G. Cota <cota@braap.org> Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <20180425025459.5258-4-peterx@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
52 lines
911 B
C
52 lines
911 B
C
#ifndef QEMU_THREAD_POSIX_H
|
|
#define QEMU_THREAD_POSIX_H
|
|
|
|
#include <pthread.h>
|
|
#include <semaphore.h>
|
|
|
|
typedef QemuMutex QemuRecMutex;
|
|
#define qemu_rec_mutex_destroy qemu_mutex_destroy
|
|
#define qemu_rec_mutex_lock qemu_mutex_lock
|
|
#define qemu_rec_mutex_trylock qemu_mutex_trylock
|
|
#define qemu_rec_mutex_unlock qemu_mutex_unlock
|
|
|
|
struct QemuMutex {
|
|
pthread_mutex_t lock;
|
|
#ifdef CONFIG_DEBUG_MUTEX
|
|
const char *file;
|
|
int line;
|
|
#endif
|
|
bool initialized;
|
|
};
|
|
|
|
struct QemuCond {
|
|
pthread_cond_t cond;
|
|
bool initialized;
|
|
};
|
|
|
|
struct QemuSemaphore {
|
|
#ifndef CONFIG_SEM_TIMEDWAIT
|
|
pthread_mutex_t lock;
|
|
pthread_cond_t cond;
|
|
unsigned int count;
|
|
#else
|
|
sem_t sem;
|
|
#endif
|
|
bool initialized;
|
|
};
|
|
|
|
struct QemuEvent {
|
|
#ifndef __linux__
|
|
pthread_mutex_t lock;
|
|
pthread_cond_t cond;
|
|
#endif
|
|
unsigned value;
|
|
bool initialized;
|
|
};
|
|
|
|
struct QemuThread {
|
|
pthread_t thread;
|
|
};
|
|
|
|
#endif
|