David Xu
1b3418b2dc
Eliminate global mutex by using pthread_once's state field as
...
a semaphore.
2008-05-30 00:02:59 +00:00
David Xu
850f4d66cb
- Reduce function call overhead for uncontended case.
...
- Remove unused flags MUTEX_FLAGS_* and their code.
- Check validity of the timeout parameter in mutex_self_lock().
2008-05-29 07:57:33 +00:00
Warner Losh
13d2e92b70
Commit missing mips libthr support that I thought I'd committed earlier
2008-05-11 05:54:52 +00:00
David Xu
cf181aee60
Remove libc_r's remnant code.
2008-05-06 07:27:11 +00:00
David Xu
8d6a11a070
Use UMTX_OP_WAIT_UINT_PRIVATE and UMTX_OP_WAKE_PRIVATE to save
...
time in kernel(avoid VM lookup).
2008-04-29 03:58:18 +00:00
Kris Kennaway
dd77f9f7f2
Increase the default MUTEX_ADAPTIVE_SPINS to 2000, after further
...
testing it turns out 200 was too short to give good adaptive
performance.
Reviewed by: jeff
MFC after: 1 week
2008-04-26 13:19:07 +00:00
Warner Losh
416e6cfbf0
Bring in mips threads support from perforce mips2-jnpr branch.
2008-04-26 12:17:57 +00:00
Xin LI
d0aa4fd3ca
Avoid various shadowed variables. libthr is now almost WARNS=4 clean except
...
for some const dequalifiers that needs more careful investigation.
Ok'ed by: davidxu
2008-04-23 21:06:51 +00:00
David Xu
fb2641d9b1
Use native rwlock.
2008-04-22 06:44:11 +00:00
David Xu
6d9517bc9f
_vfork is not in libthr, remove the reference.
2008-04-16 03:19:11 +00:00
David Xu
fa4b421a7a
don't include pthread_np.h, it is not used.
2008-04-14 08:08:40 +00:00
David Xu
caad30a422
put THR_CRITICAL_LEAVE into do .. while statement.
2008-04-03 02:47:35 +00:00
David Xu
a6cba9400a
add __hidden suffix to _umtx_op_err, this eliminates PLT.
2008-04-03 02:13:51 +00:00
David Xu
7abb97dcd8
Non-portable functions are in pthread_np.h, fix compiling problem.
2008-04-02 11:41:12 +00:00
David Xu
7a30bcf04b
Add pthread_setaffinity_np and pthread_getaffinity_np to libc namespace.
2008-04-02 08:53:18 +00:00
David Xu
8b873a2328
Remove unused functions.
2008-04-02 08:33:42 +00:00
David Xu
d6e0eb0a48
Replace function _umtx_op with _umtx_op_err, the later function directly
...
returns errno, because errno can be mucked by user's signal handler and
most of pthread api heavily depends on errno to be correct, this change
should improve stability of the thread library.
2008-04-02 07:41:25 +00:00
David Xu
8bf1a48cb3
Replace userland rwlock with a pure kernel based rwlock, the new
...
implementation does not switch pointers when it resumes waiters.
Asked by: jeff
2008-04-02 04:32:31 +00:00
David Xu
18967c1918
Restore normal pthread_cond_signal path to avoid some obscure races.
2008-04-01 06:23:08 +00:00
David Xu
f5bc4f9930
return EAGAIN early rather than running bunch of code later, micro optimize
...
static branch prediction.
2008-04-01 00:21:49 +00:00
David Xu
5ab512bb8e
Rewrite rwlock to user atomic operations to change rwlock state, this
...
eliminates internal mutex lock contention when most rwlock operations
are read.
Orignal patch provided by: jeff
2008-03-31 02:55:49 +00:00
Ruslan Ermilov
dbdb679c6f
Remove options MK_LIBKSE and DEFAULT_THREAD_LIB now that we no longer
...
build libkse. This should fix WITHOUT_LIBTHR builds as a side effect.
2008-03-29 17:44:40 +00:00
Ruslan Ermilov
e03efb02bc
Compile libthr with warnings.
2008-03-25 13:28:12 +00:00
Ruslan Ermilov
7e0e78248e
Fixed mis-implementation of pthread_mutex_get{spin,yield}loops_np().
...
Reviewed by: davidxu
2008-03-25 09:48:10 +00:00
David Xu
9939a13667
Add POSIX pthread API pthread_getcpuclockid() to get a thread's cpu
...
time clock id.
2008-03-22 09:59:20 +00:00
David Xu
04a57d2c83
Resolve __error()'s PLT early so that it needs not to be resolved again,
...
otherwise rwlock is recursivly called when signal happens and the __error
was never resolved before.
2008-03-21 02:31:55 +00:00
Ruslan Ermilov
a1292a02d3
pthread_mutexattr_destroy() was accidentally broken in last revision,
...
unbreak it. We should really start compiling this with warnings.
2008-03-20 11:47:08 +00:00
David Xu
8c38215f50
Preserve application code's errno in rtld locking code, it attemps to keep
...
any case safe.
2008-03-20 09:35:44 +00:00
David Xu
48ebe2ebc4
Make pthread_mutexattr_settype to return error number directly and
...
conformant to POSIX specification.
Bug reported by: modelnine at modelnine dt org
2008-03-20 08:27:14 +00:00
David Xu
c8a4eae56f
don't reduce new thread's refcount if current thread can not set cpuset
...
for it, since the new thread will reduce it by itself.
2008-03-19 09:33:07 +00:00
David Xu
519e8d87bb
- Trim trailing spaces.
...
- Use a different sigmask variable name to avoid confusing.
2008-03-19 08:13:04 +00:00
David Xu
86a06c6000
if passed thread pointer is equal to current thread, pass -1 to kernel
...
to speed up searching.
2008-03-19 06:38:21 +00:00
David Xu
2ea1f90a18
- Copy signal mask out before THR_UNLOCK(), because THR_UNLOCK() may call
...
_thr_suspend_check() which messes sigmask saved in thread structure.
- Don't suspend a thread has force_exit set.
- In pthread_exit(), if there is a suspension flag set, wake up waiting-
thread after setting PS_DEAD, this causes waiting-thread to break loop
in suspend_common().
2008-03-18 02:06:51 +00:00
David Xu
a9a11568ff
Actually delete SIGCANCEL mask for suspended thread, so the signal will not
...
be masked when it is resumed.
2008-03-16 03:22:38 +00:00
David Xu
150b71918c
If a thread is cancelled, it may have already consumed a umtx_wake,
...
check waiter and semphore counter to see if we may wake up next thread.
2008-03-11 03:26:47 +00:00
David Xu
8a18c0d3c8
Fix a bug when calculating remnant size.
2008-03-06 03:24:03 +00:00
David Xu
697b4b49be
Don't report death event to debugger if it is a forced exit.
2008-03-06 02:07:18 +00:00
David Xu
70e79fbb0d
Restore code setting new thread's scheduler parameters, I was thinking
...
that there might be starvations, but because we have already locked the
thread, the cpuset settings will always be done before the new thread
does real-world work.
2008-03-06 01:59:08 +00:00
David Xu
1cb51125aa
Increase and decrease in_sigcancel_handler accordingly to avoid possible
...
error caused by nested SIGCANCEL stack, it is a bit complex.
2008-03-05 07:04:55 +00:00
David Xu
54dff16b26
Use cpuset defined in pthread_attr for newly created thread, for now,
...
we set scheduling parameters and cpu binding fully in userland, and
because default scheduling policy is SCHED_RR (time-sharing), we set
default sched_inherit to PTHREAD_SCHED_INHERIT, this saves a system
call.
2008-03-05 07:01:20 +00:00
David Xu
07bbb16640
Add more cpu affinity function's symbols.
2008-03-05 06:56:35 +00:00
David Xu
21845eb98d
Check actual size of cpuset kernel is using and define underscore version
...
of API.
2008-03-05 06:55:48 +00:00
David Xu
76a9679f8e
If a new thread is created, it inherits current thread's signal masks,
...
however if current thread is executing cancellation handler, signal
SIGCANCEL may have already been blocked, this is unexpected, unblock the
signal in new thread if this happens.
MFC after: 1 week
2008-03-04 04:28:59 +00:00
David Xu
54c9b47c2b
Include cpuset.h, unbreak compiling.
2008-03-04 03:45:11 +00:00
David Xu
a759db946a
implement pthread_attr_getaffinity_np and pthread_attr_setaffinity_np.
2008-03-04 03:03:24 +00:00
David Xu
57030e1071
Implement functions pthread_getaffinity_np and pthread_setaffinity_np to
...
get and set thread's cpu affinity mask.
2008-03-03 09:16:29 +00:00
Dag-Erling Smørgrav
096ba44775
_pthread_mutex_isowned_np(): use a more reliable method; the current code
...
will work in simple cases, but may fail in more complicated ones.
Reviewed by: davidxu
2008-02-14 12:37:58 +00:00
David E. O'Brien
a2c4cd4549
style.Makefile(5)
2008-02-13 05:25:43 +00:00
David E. O'Brien
6cc9986927
style(9)
2008-02-13 05:12:05 +00:00
Dag-Erling Smørgrav
47252f4e65
Yet another pointy hat: when I zapped FBSDprivate_1.1, I forgot to move
...
its contents to FBSDprivate_1.0.
2008-02-06 20:45:46 +00:00