Feature #13552 » 0001-thread_sync.c-rename-mutex_waiter-struct-to-sync_wai.patch
thread_sync.c | ||
---|---|---|
/* Mutex */
|
||
/* mutex_waiter is always on-stack */
|
||
struct mutex_waiter {
|
||
/* sync_waiter is always on-stack */
|
||
struct sync_waiter {
|
||
rb_thread_t *th;
|
||
struct list_node node;
|
||
};
|
||
... | ... | |
static size_t
|
||
rb_mutex_num_waiting(rb_mutex_t *mutex)
|
||
{
|
||
struct mutex_waiter *w;
|
||
struct sync_waiter *w;
|
||
size_t n = 0;
|
||
list_for_each(&mutex->waitq, w, node) {
|
||
... | ... | |
}
|
||
if (rb_mutex_trylock(self) == Qfalse) {
|
||
struct mutex_waiter w;
|
||
struct sync_waiter w;
|
||
if (mutex->th == th) {
|
||
rb_raise(rb_eThreadError, "deadlock; recursive locking");
|
||
... | ... | |
else if (mutex->th != th) {
|
||
err = "Attempt to unlock a mutex which is locked by another thread";
|
||
} else {
|
||
struct mutex_waiter *cur = 0, *next = 0;
|
||
struct sync_waiter *cur = 0, *next = 0;
|
||
rb_mutex_t *volatile *th_mutex = &th->keeping_mutexes;
|
||
mutex->th = 0;
|
||
-
|