7 Commits

Author SHA1 Message Date
Rich Felker
067bdc2c18 correctly handle the degenerate barrier in the pshared case 2011-09-27 23:08:59 -04:00
Rich Felker
d8dc1df1c2 fix pshared barrier wrong return value.
i set the return value but then never used it... oops!
2011-09-27 17:03:44 -04:00
Rich Felker
6016457011 process-shared barrier support, based on discussion with bdonlan
this implementation is rather heavy-weight, but it's the first
solution i've found that's actually correct. all waiters actually wait
twice at the barrier so that they can synchronize exit, and they hold
a "vm lock" that prevents changes to virtual memory mappings (and
blocks pthread_barrier_destroy) until all waiters are finished
inspecting the barrier.

thus, it is safe for any thread to destroy and/or unmap the barrier's
memory as soon as pthread_barrier_wait returns, without further
synchronization.
2011-09-27 13:50:29 -04:00
Rich Felker
9dd6399c95 remove debug code that was missed in barrier commit 2011-05-06 20:27:45 -04:00
Rich Felker
f16a3089be completely new barrier implementation, addressing major correctness issues
the previous implementation had at least 2 problems:

1. the case where additional threads reached the barrier before the
first wave was finished leaving the barrier was untested and seemed
not to be working.

2. threads leaving the barrier continued to access memory within the
barrier object after other threads had successfully returned from
pthread_barrier_wait. this could lead to memory corruption or crashes
if the barrier object had automatic storage in one of the waiting
threads and went out of scope before all threads finished returning,
or if one thread unmapped the memory in which the barrier object
lived.

the new implementation avoids both problems by making the barrier
state essentially local to the first thread which enters the barrier
wait, and forces that thread to be the last to return.
2011-05-06 20:00:59 -04:00
Rich Felker
e882756311 reorganize pthread data structures and move the definitions to alltypes.h
this allows sys/types.h to provide the pthread types, as required by
POSIX. this design also facilitates forcing ABI-compatible sizes in
the arch-specific alltypes.h, while eliminating the need for
developers changing the internals of the pthread types to poke around
with arch-specific headers they may not be able to test.
2011-02-17 17:16:20 -05:00
Rich Felker
0b44a0315b initial check-in, version 0.5.0 2011-02-12 00:22:29 -05:00