mailing list of musl libc
 help / color / mirror / code / Atom feed
f4456460d0413669be82668f8bb7b28be363e5a8 blob 931 bytes (raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
#include "pthread_impl.h"

int pthread_cond_broadcast(pthread_cond_t *c)
{
	pthread_mutex_t *m;

	if (!c->_c_waiters) return 0;

	a_inc(&c->_c_seq);

	/* If cond var is process-shared, simply wake all waiters. */
	if (c->_c_mutex == (void *)-1) {
		__wake(&c->_c_seq, -1, 0);
		return 0;
	}

	/* Block waiters from returning so we can use the mutex. */
	while (a_swap(&c->_c_lock, 1))
		__wait(&c->_c_lock, &c->_c_lockwait, 1, 1);
	if (!c->_c_waiters)
		goto out;
	m = c->_c_mutex;

	/* Move waiter count to the mutex */
	a_fetch_add(&m->_m_waiters, c->_c_waiters2);
	c->_c_waiters2 = 0;

	/* Perform the futex requeue, waking one waiter unless we know
	 * that the calling thread holds the mutex. */
	__syscall(SYS_futex, &c->_c_seq, FUTEX_REQUEUE,
		!m->_m_type || (m->_m_lock&INT_MAX)!=__pthread_self()->tid,
		INT_MAX, &m->_m_lock);

out:
	a_store(&c->_c_lock, 0);
	if (c->_c_lockwait) __wake(&c->_c_lock, 1, 1);

	return 0;
}
debug log:

solving f445646 ...
found f445646 in https://inbox.vuxu.org/musl/20140626184803.GA8845@brightrain.aerifal.cx/
found 0901daf in https://git.vuxu.org/mirror/musl/
preparing index
index prepared:
100644 0901daf663cd0078258767d1b55c95714cb22725	src/thread/pthread_cond_broadcast.c

applying [1/1] https://inbox.vuxu.org/musl/20140626184803.GA8845@brightrain.aerifal.cx/
diff --git a/src/thread/pthread_cond_broadcast.c b/src/thread/pthread_cond_broadcast.c
index 0901daf..f445646 100644

Checking patch src/thread/pthread_cond_broadcast.c...
Applied patch src/thread/pthread_cond_broadcast.c cleanly.

index at:
100644 f4456460d0413669be82668f8bb7b28be363e5a8	src/thread/pthread_cond_broadcast.c

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).