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;
|
||
|
-
|
||