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
Dag-Erling Smørgrav
d29b081fee
Remove unnecessary prototype.
2008-02-06 20:43:19 +00:00
Dag-Erling Smørgrav
a9b9744ff8
Convert pthread.map to the format expected by version_gen.awk, and modify
...
the Makefile accordingly; libthr now explicitly uses libc's Versions.def.
MFC after: 2 weeks
2008-02-06 20:25:00 +00:00
Dag-Erling Smørgrav
facfc98226
Remove incorrectly added FBSDprivate_1.1 namespace, and move symbols which
...
are new in FreeBSD 8 to the appropriate namespace.
2008-02-06 20:20:29 +00:00
Dag-Erling Smørgrav
1cbdac2668
Per discussion on -threads, rename _islocked_np() to _isowned_np().
2008-02-06 19:34:31 +00:00
Dag-Erling Smørgrav
fcd61d9141
After careful consideration (and a brief discussion with attilio@), change
...
the semantics of pthread_mutex_islocked_np() to return true if and only if
the mutex is held by the current thread.
Obviously, change the regression test to match.
MFC after: 2 weeks
2008-02-04 12:35:23 +00:00
Dag-Erling Smørgrav
5fd410a787
Add pthread_mutex_islocked_np(), a cheap way to verify that a mutex is
...
locked. This is intended primarily to support the userland equivalent
of the various *_ASSERT_LOCKED() macros we have in the kernel.
MFC after: 2 weeks
2008-02-03 22:38:10 +00:00
David Xu
8d0a4dab61
SYSTEM_SCOPE_ONLY flag is no longer needed, it is the only mode libthr
...
supports.
2008-01-18 04:29:36 +00:00
David Xu
0c921dadbb
sem_post() requires to return -1 on error.
2008-01-07 02:26:29 +00:00
David Xu
9ba01c866b
call underscore version of pthread_cleanup_pop instead.
2007-12-20 04:40:12 +00:00
David Xu
06c8eb55ce
Remove vfork() overloading, it is no longer needed.
2007-12-20 04:32:28 +00:00
David Xu
c5f411515c
Add function prototypes.
2007-12-17 02:53:11 +00:00
David Xu
093fcf1694
1. Add function pthread_mutex_setspinloops_np to turn a mutex's spin
...
loop count.
2. Add function pthread_mutex_setyieldloops_np to turn a mutex's yield
loop count.
3. Make environment variables PTHREAD_SPINLOOPS and PTHREAD_YIELDLOOPS
to be only used for turnning PTHREAD_MUTEX_ADAPTIVE_NP mutex.
2007-12-14 06:25:57 +00:00
David Xu
6a663207e7
Enclose all code for macro ENQUEUE_MUTEX in do while statement, and
...
add missing brackets.
MFC: after 1 day
2007-12-11 08:00:58 +00:00