Commit Graph

137 Commits

Author SHA1 Message Date
christos
143f5a277a pass lint:
1. add new pthread__abort() and change pthread_assert(0) to it.
2. put constcond in the right place (in the macro).
3. no space after pthread__assert macro.
2003-05-27 15:24:24 +00:00
christos
4e29fa8276 add missing notreached lint comment. 2003-05-27 15:22:56 +00:00
nathanw
5faa7f5bef * Recycle upcall stacks as soon as possible rather than waiting to
accumulate half of the total number. There are too many ways for
  the SA subsystem to deadlock waiting for stacks that userland has no
  reason to recycle.

* Consolidate switchto handling in pthread_resolve_locks().

* Add code to re-chain the preempting parents of switchtos.

* Tweak debuglog output in a couple of cases.
2003-05-26 19:41:03 +00:00
scw
5bd6b99940 Both pthread__lock_ras_start and pthread__lock_ras_end need to be
explicitly declared global in the asm() statements for the benefit of
SH5 binutils. Otherwise, the assembler/linker (I haven't figured out
which) botches the SHmedia bit when generating GOT references for
these symbols in the shared version of the library.

Ok'd by Nathan.
2003-05-16 23:37:47 +00:00
scw
644aebe258 Duh. s/PIC_PROLOGUE/PIC_EPILOGUE/ 2003-05-16 22:40:56 +00:00
nathanw
baa073280b Separately report unlocking an unlocked mutex and unlocking a mutex
owned by another thread.
2003-05-16 21:28:26 +00:00
wiz
76907a433e Fix typo in comment. 2003-05-15 19:16:37 +00:00
nathanw
a06836c083 Remove an unnecessary test in pthread_getspecific(). 2003-05-15 19:13:24 +00:00
petrov
cf5b7785eb Add missing include and copyright. 2003-05-07 01:21:13 +00:00
nathanw
ff14fbf244 Move call to pthread__alarm_init() from pthread_init() (called at load
time) to pthread__start() (called on the first call of
pthread_create()), so that there's no opportunity for a fork() to
clear the per-process timer.

Problem pointed out by a test program from Mihai CHELARU on
current-users.
2003-04-28 17:46:30 +00:00
nathanw
3f6de8d84a Use pthread__error() instead of pthread__abort(). 2003-04-23 19:36:12 +00:00
nathanw
df2772713e Introduce a pthread__error() macro, for detected application errors as
opposed to internal errors. The setting of the PTHREAD_ERRORMODE
environment variable determines the runtime behavior. Valid settings
are "ignore", "abort", and "print". The default is currently "abort".
2003-04-23 19:35:47 +00:00
nathanw
b7ac97b866 More agressive assertions. Change a number of detected conditions, which
officially have undefined behavior, from returning an error code to raising
an assertion failure.
Also, don't bother to explicitly test for (illegal) null pointers and return
an error; they'll bomb out soon enough.
2003-04-18 21:36:38 +00:00
nathanw
66fc73c7eb Use a __predict_true() in the definition of pthread__assert(). 2003-04-18 21:32:32 +00:00
fvdl
b32287cc19 Catch up with changed struct reg (same as gregs in mcontext now). 2003-04-17 10:13:51 +00:00
nathanw
a74799949a pthread_mutex_trylock(): It's not an error to call trylock() on a
mutex already locked by the calling thread, even for non-recursive
mutexes.
2003-04-16 18:59:12 +00:00
nathanw
008033bb65 When a thread sleeps on a mutex or cv, have it put itself on the
front of the sleep queue rather than the back. This is more
cache-friendly behavior and within the (lack of) constraints on wakeup
ordering imposed on equal-priority threads.
2003-04-16 18:30:43 +00:00
nathanw
8114703654 Fix a fencepost error in writing to the debug buffer. 2003-04-16 17:37:47 +00:00
nathanw
2a4cef11ba When threads are started, register an atfork callback to clear
pthread__started in the child process. This lets sleep() work in the
child, as required by POSIX.
2003-04-07 21:29:48 +00:00
nathanw
45c9543071 Consistently use pthread__assert() rather than err() to assert that
timer_settime() worked, and don't bother calling err() after a
pthread__assert() call.
2003-04-07 19:41:22 +00:00
bjh21
55cecd0f26 NetBSD/acorn26 has used APCS-32 for years, so unifdef -U__APCS_26__. 2003-04-05 23:15:10 +00:00
nathanw
4777259ff2 Don't call pthread__locked_switch() to switch to ourself. Bad stack
mangling results.

Fixes regression in test yield2, dating to 2003/1/2 when
pthread__locked_switch() was changed to not store the saved-context
pointer until after switching stacks.

Note to self: regression tests exist to be run.
2003-04-04 01:08:25 +00:00
scw
52569eab7f Add PIC support. 2003-03-26 22:33:56 +00:00
nathanw
a0628261fe Use pthread__assert() instead of plain assert(), as the latter has
locking issues.
2003-03-20 01:03:52 +00:00
nathanw
a25b9285d9 Add a wrapper for the execve() system call that arranges for the current
thread sigal mask to be propagated into the new process image.
2003-03-14 22:27:34 +00:00
thorpej
04d0b802f7 Include <sys/types> before <sys/lock.h>, shuffle <ucontext.h>. 2003-03-13 19:51:33 +00:00
nathanw
64324a8175 Remove debugging code accidentally committed. 2003-03-11 16:27:38 +00:00
nathanw
16612d0814 * Use a <= comparison rather than a < comparison when searching for
alarms to process.

* Remove a redundant assignment.

* Make a debug message more consistent with the others.
2003-03-11 00:18:36 +00:00
nathanw
37c11910ec Re-enable nanosleep(); kernel bug is squished (kern_time.c:1.67). 2003-03-10 22:16:36 +00:00
lukem
f043c0fb57 add __RCSID() 2003-03-08 08:03:34 +00:00
scw
65e4a59445 Don't use FP instructions when building for m68010. Fixes broken sun2 build.
G/C some unused code.
2003-03-01 11:51:59 +00:00
nathanw
a4314c450c Disable userlevel nanosleep() until I find the timer/alarm bug that it
is tickling.
2003-02-28 18:37:44 +00:00
lha
c2d825cbda If pthreads hasn't started yet when calling sigsuspend, use the systemcall 2003-02-28 17:30:07 +00:00
nathanw
508a50ac15 In pthread_create(), rearrange name-setting code so that name is set
to NULL when the attribute structure does not have a private field
allocated.
2003-02-26 23:41:01 +00:00
thorpej
b33971b9c3 Add support for naming a thread, using an API compatible with Tru64 Unix:
* pthread_attr_getname_np()
* pthread_attr_setname_np()
* pthread_getname_np()
* pthread_setname_np()

In addition to being query'able by the application (for log messages, etc.),
it is intended that these names can show up in the debugger.

Reviewed by nathanw.
2003-02-26 22:02:48 +00:00
nathanw
66fcc1ce38 In pthread_exit(), clear pt_canceled in addition to setting
PT_FLAG_CS_DISABLED in pt_flags.

Prevents cancellation cleanup handlers from thinking that they've been
canceled and exiting mid-handler. Problem spotted by Matt Thomas.
2003-02-22 00:53:29 +00:00
nathanw
6aab0806c8 Implement nanosleep() at userlevel. Threaded applications seem to like
to sleep a lot, and there's no need for each such thread to consume kernel
resources.

(accidentally checked the pthread.c part of this in yesterday; no reason
 not to finish the job)
2003-02-15 22:15:50 +00:00
jdolecek
e6781abf3f interposition sigtimedwait() with a thread-aware version, which uses
single proxy thread to do the actual syscall, and blocks other threads
in userland
2003-02-15 21:18:59 +00:00
nathanw
ca0eaa6f66 Remove unused #include <assert.h> 2003-02-15 04:39:16 +00:00
nathanw
6adb81d685 Move debug toggle to pthread_debug.h. 2003-02-15 04:38:58 +00:00
nathanw
de9d8cde2a Remove debug toggle and add debug counter for signals and broadcasts
that actually wake another thread up.
2003-02-15 04:38:33 +00:00
nathanw
53827081be Adapt to pthread__assert() and remove local debug toggle. 2003-02-15 04:37:04 +00:00
nathanw
8bcff70bb0 Define a pthread-specific assert function, pthread__assert(), that
bails out without trying to flush stdio buffers.
2003-02-15 04:34:40 +00:00
nathanw
e0ae1bd1b7 Move module-specific debugging definitions here. 2003-02-15 04:33:45 +00:00
nathanw
515d60d00c Remove unnecessary inclusion of <assert.h>. 2003-02-15 00:52:18 +00:00
nathanw
4fb740b8de Implement pthread_atfork() (in libc, because the required threadlib
stub behavior is exactly the same as the usual behavior).
2003-02-13 02:50:48 +00:00
fvdl
59f9830997 Continue at the plain switch return point in pthread__switch, not the
locked one, in the !PIC case. From Tor Egge via Havard Eidnes.
2003-02-10 11:09:33 +00:00
jdolecek
ef9eed1dac pthread_kill() was implemented, remove from list
pthread_cond_timedwait() now works even before SA initialization, but some
other routines do not; update the paragraph for this
2003-02-06 09:55:47 +00:00
jdolecek
9cac4b3f36 minor whitespace changes 2003-02-04 20:14:10 +00:00
nathanw
947e41dfa9 Arrange to pause for a while if pthread_cond_wait() or
pthread_cond_timedwait() is called before any threads have been
created and the SA infrastructure is up and running.

Addresses PR lib/20139.

XXX probably need to do this for all of the pthread_*_timedlock()
functions, too.
2003-02-01 00:57:31 +00:00