296373 |
04-Mar-2016 |
marius |
- Copy stable/10@296371 to releng/10.3 in preparation for 10.3-RC1 builds. - Update newvers.sh to reflect RC1. - Update __FreeBSD_version to reflect 10.3. - Update default pkg(8) configuration to use the quarterly branch.
Approved by: re (implicit) |
256281 |
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
179434 |
30-May-2008 |
dfr |
Call the fcntl compatiblity wrapper from the thread library fcntl wrappers so that they get the benefit of the (limited) forward ABI compatibility.
MFC after: 1 week
|
177626 |
26-Mar-2008 |
brueffer |
Fix some "in in" typos in comments.
PR: 121490 Submitted by: Anatoly Borodin <anatoly.borodin@gmail.com> Approved by: rwatson (mentor), jkoshy MFC after: 3 days
|
176071 |
06-Feb-2008 |
des |
Add missing #include
Spotted by: tinderbox Submitted by: Pietro Cerutti <gahr@gahr.ch> Pointy hat to: des
|
176060 |
06-Feb-2008 |
des |
Add pthread_mutex_isowned_np() here as well; libthr and libkse are supposed to have identical functionality.
MFC after: 2 weeks
|
174689 |
16-Dec-2007 |
deischen |
Remove hacks to allow libkse to export its symbols in the LIBTHREAD_1_0 version namespace which was needed before the library version was bumped.
|
174335 |
06-Dec-2007 |
deischen |
Set the tcb (thread control block) in the child process after a fork. This protects against a race with an upcall in the parent during the fork which can clobber the parent's tcb before the vm space is copied in the child. The child then gets a corrupted tcb that is either null or that points to another thread that doesn't exist in the child (after a fork, only the fork()ing thread exists in the child).
Reported by: Arno J. Klaassen (arno at heho / snv / jussieu / fr)
|
174112 |
30-Nov-2007 |
deischen |
WARNS=3'ify.
|
174111 |
30-Nov-2007 |
deischen |
Initialize the current thread and signal locks so that sigaction() will work after a fork().
WARNS=3'ify.
|
174001 |
28-Nov-2007 |
jasone |
Fix pointer dereferencing problems in _pthread_mutex_init_calloc_cb() that were obscured by pseudo-opaque pthreads API pointer casting.
|
173967 |
27-Nov-2007 |
jasone |
Add _pthread_mutex_init_calloc_cb() to libthr and libkse, so that malloc(3) (part of libc) can use pthreads mutexes without causing infinite recursion during initialization.
|
173921 |
26-Nov-2007 |
davidxu |
Move the added code in revision 1.26 into function pthread_key_create, it should be there.
|
173741 |
19-Nov-2007 |
davidxu |
MFlibthr: In _pthread_key_create() ensure that libkse is initialized.
|
173154 |
29-Oct-2007 |
kris |
Add a new "non-portable" mutex type, PTHREAD_MUTEX_ADAPTIVE_NP. This is also implemented in glibc and is used by a number of existing applications (mysql, firefox, etc).
This mutex type is a default mutex with the additional property that it spins briefly when attempting to acquire a contested lock, doing trylock operations in userland before entering the kernel to block if eventually unsuccessful.
The expectation is that applications requesting this mutex type know that the mutex is likely to be only held for very brief periods, so it is faster to spin in userland and probably succeed in acquiring the mutex, than to enter the kernel and sleep, only to be woken up almost immediately. This can help significantly in certain cases when pthread mutexes are heavily contended and held for brief durations (such as mysql).
Spin up to 200 times before entering the kernel, which represents only a few us on modern CPUs. No performance degradation was observed with this value and it is sufficient to avoid a large performance drop in mysql performance in the heavily contended pthread mutex case.
The libkse implementation is a NOP.
Reviewed by: jeff MFC after: 3 days
|
169524 |
13-May-2007 |
deischen |
Enable symbol versioning by default. Use WITHOUT_SYMVER to disable it. Warning, after symbol versioning is enabled, going back is not easy (use WITHOUT_SYMVER at your own risk).
Change the default thread library to libthr.
There most likely still needs to be a version bump for at least the thread libraries. If necessary, this will happen later.
|
169094 |
29-Apr-2007 |
deischen |
Catch up with the renaming of the private version namespace.
|
168964 |
23-Apr-2007 |
deischen |
Add a reference and lock the target thread when setting its name.
Submitted by: davidxu (via libthr)
|
167244 |
05-Mar-2007 |
brian |
Oops, fix a typo in the last commit :-/
|
167241 |
05-Mar-2007 |
brian |
In the NOTYET code path when a process forks, the remaining child thread goes back to system scope rather than process scope. This allows an ensuing exec() to actually work.
This change was made a year ago here, but I "forgot" to commit it :(
Approved by: deischen MFC after: 3 weeks
|
165967 |
12-Jan-2007 |
imp |
Remove 3rd clause, renumber, ok per email
|
165334 |
18-Dec-2006 |
peadar |
Clean bound and non-bound pthread structures consistently before they become candidates for reuse. Without this fix, some of the state from a thread structure's previous incarnation could interfere with its new one. Specifically, a non-bound thread started as "suspended" (see pthread_attr_setcreatesuspend_np()) might not get scheduled at all when resumed, as the "active" flag would be set spuriously.
Reviewed by: deischen@, davidxu@ MFC after: 1 week
|
164715 |
28-Nov-2006 |
davidxu |
If a thread was detached, return EINVAL instead, the error code is also returned by pthread_detach() if a thread was already detached, the error code was already documented:
> [EINVAL] The implementation has detected that the value speci- > fied by thread does not refer to a joinable thread.
|
159462 |
09-Jun-2006 |
maxim |
o Remove a cruft prevented libpthread sigaction(2) wrapper to do its work for SIGINFO. Always install libpthread signal handler wrapper for SIGINFO even if user SIG_IGN's or SIG_DFL's it.
SIGINFO has a special meaning for libpthread: when LIBPTHREAD_DEBUG enviroment variable defined it is used for dumping an information about threads to /tmp/.
Reported by: mi Reviewed by: deischen MFC after: 2 weeks
|
158679 |
17-May-2006 |
davidxu |
Export offsets of thread signal pending set and signal mask for debugger.
|
157700 |
13-Apr-2006 |
delphij |
Unexpand TAILQ_FIRST(foo) == NULL to TAILQ_EMPTY.
Ok'ed by: davidxu
|
157243 |
29-Mar-2006 |
des |
Bring libpthread up to WARNS level 2.
Reviewed by: deischen
|
157235 |
28-Mar-2006 |
des |
Fix prototype mismatch and use of un-namespaced pthread functions.
|
157228 |
28-Mar-2006 |
deischen |
Use the correct type for and argument. Recent changes to namespace.h exposed this bug.
Reported by: kris
|
156611 |
13-Mar-2006 |
deischen |
Add compatibility symbol maps. libpthread (.so.1 and .so.2) used LIBTHREAD_1_0 as its version definition, but now needs to define its symbols in the same namespace used by libc. The compatibility hooks allows you to use libraries and binaries built and linked to libpthread before libc was built with symbol versioning. The shims can be removed if libpthread is given a version bump.
Reviewed by: davidxu
|
156330 |
06-Mar-2006 |
deischen |
Only catch SIGINFO (for dumping thread states) when LIBPTHREAD_DEBUG is defined in the environment.
Requested by: jmg & a few others
|
156319 |
05-Mar-2006 |
deischen |
Add some more pthread stubs so that librt can use them. The thread jump table has been resorted, so you need to keep libc, libpthread, and libthr in sync.
Submitted by: xu
|
155962 |
23-Feb-2006 |
deischen |
Eliminate a race condition in timed waits (cv, mutex, and sleeps). MFC Candidate.
PR: 93592
|
155745 |
16-Feb-2006 |
deischen |
Don't forget to initialize a tailq before using it.
MFC candidate Noticed by: luoqi
|
154288 |
13-Jan-2006 |
jasone |
Increase the number of spinlocks, since libc's malloc implementation is about to significantly increase the number of spinlocks used.
Approved by: markm (mentor)
|
154248 |
12-Jan-2006 |
jasone |
In preparation for a new malloc implementation:
* Add posix_memalign().
* Move calloc() from calloc.c to malloc.c. Add a calloc() implementation in rtld-elf in order to make the loader happy (even though calloc() isn't used in rtld-elf).
* Add _malloc_prefork() and _malloc_postfork(), and use them instead of directly manipulating __malloc_lock.
Approved by: phk, markm (mentor)
|
153989 |
03-Jan-2006 |
brian |
For the ``#ifdef NOTYET'' code that allows calling non-async-safe functions in the child after a fork() from a threaded process, use __sys_setprocmask() rather than setprocmask() to keep our signal handling sane. Without this fix, signals are essentially ignored in said child and things such as protection violations result in an endless busy loop.
Reviewed by: deischen
|
151616 |
24-Oct-2005 |
davidxu |
Include files thr_condattr_pshared.c and thr_mattr_pshare.c.
|
151612 |
24-Oct-2005 |
davidxu |
Add functions pthread_mutexattr_setpshared and pthread_mutexattr_getpshared.
|
151611 |
24-Oct-2005 |
davidxu |
Add function pthread_condattr_setpshared and pthread_condattr_getpshared.
|
150499 |
24-Sep-2005 |
brian |
Modify the code path of the ifdef NOTYET part of _kse_single_thread():
o Don't reinitialise the atfork() handler list in the child. We are meant to call the child handler, and on subsequent fork()s should call all three functions as normal. o Don't reinitialise the thread specific keyed data in the child after a fork. Applications may require this for context. o Reinitialise curthread->tlflags after removing ourselves from (and reinitialising) the various internal thread lists. o Reinitialise __malloc_lock in the child after fork() (to balance our explicitly taking the lock prior to the fork()).
With these changes, it is possible to enable the NOTYET code in thr_kern.c to allow the use of non-async-safe functions after fork()ing from a threaded program.
Reviewed by: Daniel Eischen <deischen@freebsd.org> [_malloc_lock reinitialisation has since been moved to avoid polluting the !NOTYET code]
|
149691 |
01-Sep-2005 |
stefanf |
Include needed headers that were obtained through <pthread.h>. Sort headers while here.
|
149617 |
30-Aug-2005 |
deischen |
Allocate a thread's tcb last so it is easier to handle failures to malloc() siginfo.
PR: 85468
|
149579 |
29-Aug-2005 |
deischen |
Handle failure to malloc() part of the thread structure.
PR: 83457
|
149578 |
29-Aug-2005 |
deischen |
Don't attempt to initialize the rtld lock if it can't be malloc()'d.
PR: 83452
|
149298 |
19-Aug-2005 |
stefanf |
- Prefix MUTEX_TYPE_MAX with PTHREAD_ to avoid namespace pollution. - Remove the macros MUTEX_TYPE_FAST and MUTEX_TYPE_COUNTING_FAST.
OK'ed by: deischen
|
148660 |
03-Aug-2005 |
deischen |
Add a cancellation point for usleep().
|
147533 |
22-Jun-2005 |
davidxu |
Fix off-by-one nanosecond in macro TIMESPEC_ADD.
Reviewed by: deischen Approved by: re (dwhite) MFC after : 4 days
|
142047 |
18-Feb-2005 |
deischen |
Somewhere along the line, tick accumulation for SA threads was changed to use the statclock. Make sure we calculate the value of a tick correctly in userland.
Noticed by: Kazuaki Oda <kaakun at highway dot ne dot jp>
|
141949 |
15-Feb-2005 |
deischen |
Set the default guardsize and stacksize in the default thread attribute when the library is initialized.
|
141822 |
13-Feb-2005 |
deischen |
Increase the default stacksizes:
32-bit 64-bit main thread 2MB 4MB other threads 1MB 2MB
|
139052 |
19-Dec-2004 |
deischen |
Don't panic when sigsuspend is interrupted by a cancellation.
PR: 75273
|
139023 |
18-Dec-2004 |
deischen |
Use a generic way to back threads out of wait queues when handling signals instead of having more intricate knowledge of thread state within signal handling.
Simplify signal code because of above (by David Xu).
Use macros for libpthread usage of pthread_cleanup_push() and pthread_cleanup_pop(). This removes some instances of malloc() and free() from the semaphore and pthread_once() implementations.
When single threaded and forking(), make sure that the current thread's signal mask is inherited by the forked thread.
Use private mutexes for libc and libpthread. Signals are deferred while threads hold private mutexes. This fix also breaks www/linuxpluginwrapper; a patch that fixes it is at http://people.freebsd.org/~deischen/kse/linuxpluginwrapper.diff
Fix race condition in condition variables where handling a signal (pthread_kill() or kill()) may not see a wakeup (pthread_cond_signal() or pthread_cond_broadcast()).
In collaboration with: davidxu
|
137105 |
01-Nov-2004 |
davidxu |
Save cancelflags in signal frame, this fixes a problem that a thread in pthread_cond_wait handled a signal can no longer be canceled.
Reviewed by: deischen
|
137095 |
31-Oct-2004 |
green |
Make pthread_mutex_trylock(3) return EBUSY on failure, as all software packages expect and seems to be most correct according to the slightly- ambiguous standards.
MFC after: 1 month Corroborated by: POSIX <http://tinyurl.com/4uvub> Reviewed by: silence on threads@
|
136847 |
23-Oct-2004 |
davidxu |
Check unhandled signals before thread marks itself as DEAD, this reduces chances of signal losting problem found by Peter Holm <peter@holm.cc>
|
136846 |
23-Oct-2004 |
davidxu |
1. Move thread list flags into new separate member, and atomically put DEAD thread on GC list, this closes a race between pthread_join and thr_cleanup. 2. Introduce a mutex to protect tcb initialization, tls allocation and deallocation code in rtld seems no lock protection or it is broken, under stress testing, memory is corrupted.
Reviewed by: deischen patch partly provided by: deischen
|
136735 |
21-Oct-2004 |
davidxu |
Decrease reference count if we won't use the thread, this avoids memory leak under some cases.
|
136286 |
08-Oct-2004 |
davidxu |
if system scope thread didn't set timeout, don't call clock_gettime syscall before and after sleeping.
Reviewed by: deischen
|
136227 |
07-Oct-2004 |
davidxu |
Use PTHREAD_SCOPE_SYSTEM to decide what should be done.
|
136223 |
07-Oct-2004 |
davidxu |
Follow kernel change, restore signal mask correctly by using a command of kse_thr_interrupt.
|
136190 |
06-Oct-2004 |
davidxu |
Allocate red zone and stack space together and then split red zone from allocated space, orignal code left red zone unallocated, but those space can be allocated by user code, and result was providing no protection.
|
135809 |
26-Sep-2004 |
deischen |
Add a wrapper for execve(). The exec'd process must be started with the signal mask and pending signals of the calling thread. These are stored in userland in libpthread.
There is a small race condition in this patch which could cause problems if a signal arrives after setting the (kernel) signal mask and before exec'ing. The thread's set of pending signals also are not yet installed in the exec'd process. Both of these will be corrected with the addition of a special syscall.
Reported & Tested by: Joost Bekkers <joost at jodocus dot org> Reviewed by: julian, davidxu
|
135714 |
24-Sep-2004 |
ssouhlal |
Make sure we don't call _thr_start_sig_daemon() when SYSTEM_SCOPE_ONLY is defined. This makes libpthread usable on powerpc.
Approved by: grehan (mentor), deischen
|
134115 |
21-Aug-2004 |
davidxu |
Pull debug symbols in for statically linked binary.
Reviewed by: desichen
|
133801 |
16-Aug-2004 |
davidxu |
1. Add macro DTV_OFFSET to calculate dtv offset in tcb. 2. Export symbols needed by debugger.
|
133800 |
16-Aug-2004 |
davidxu |
Add a file to collection all symbols will be needed by debugger.
|
133756 |
15-Aug-2004 |
dfr |
Add TLS support for i386 and amd64.
|
133563 |
12-Aug-2004 |
deischen |
As long as we have a knob to force system scope threads, why not have a knob to force process scope threads. If the environment variable LIBPTHREAD_PROCESS_SCOPE is set, force all threads to be process scope threads regardless of how the application creates them. If LIBPTHREAD_SYSTEM_SCOPE is set (forcing system scope threads), it overrides LIBPTHREAD_PROCESS_SCOPE.
$ # To force system scope threads $ LIBPTHREAD_SYSTEM_SCOPE=anything threaded_app $ # To force process scope threads $ LIBPTHREAD_PROCESS_SCOPE=anything threaded_app
|
133344 |
08-Aug-2004 |
davidxu |
Check debugger suspending flag for system scope thread.
Reviewed by: deischen
|
133269 |
07-Aug-2004 |
deischen |
Add a way to force 1:1 mode for libpthread. To do this, define LIBPTHREAD_SYSTEM_SCOPE in the environment.
You can still force libpthread to be built in strictly 1:1 by adding -DSYSTEM_SCOPE_ONLY to CFLAGS. This is kept for archs that don't yet support M:N mode.
Requested by: rwatson Reviewed by: davidxu
|
133047 |
03-Aug-2004 |
davidxu |
s/TMDF_DONOTRUNUSER/TMDF_SUSPEND/g
Dicussed with: deischen
|
132333 |
18-Jul-2004 |
marcel |
Don't include lock.h and pthread_md.h when we're being included by libthread_db. Both headers are included seperately.
|
132124 |
13-Jul-2004 |
davidxu |
Remove unused symbols.
|
132122 |
13-Jul-2004 |
davidxu |
Let debugger check signal, make SIGINFO works.
|
132121 |
13-Jul-2004 |
davidxu |
If _libkse_debug is not zero, activate thread mode.
|
132120 |
13-Jul-2004 |
davidxu |
Add code to support thread debugging. 1. Add global varible _libkse_debug, debugger uses the varible to identify libpthread. when the varible is written to non-zero by debugger, libpthread will take some special action at context switch time, it will check TMDF_DOTRUNUSER flags, if a thread has the flags set by debugger, it won't be scheduled, when a thread leaves KSE critical region, thread checks the flag, if it was set, the thread relinquish CPU.
2. Add pq_first_debug to select a thread allowd to run by debugger.
3. Some names prefixed with _thr are renamed to _thread prefix.
which is allowed to run by debugger.
|
130374 |
12-Jun-2004 |
davidxu |
Check pending signals, if there is signal will be unblocked by sigsuspend, thread shouldn't wait, in old code, it may be ignored. When a signal handler is invoked in sigsuspend, thread gets two different signal masks, one is in thread structure, sigprocmask() can retrieve it, another is in ucontext which is a third parameter of signal handler, the former is the result of sigsuspend mask ORed with sigaction's sa_mask and current signal, the later is the mask in thread structure before sigsuspend is called. After signal handler is called, the mask in ucontext should be copied into thread structure, and becomes CURRENT signal mask, then sigsuspend returns to user code.
Reviewed by: deischen Tested by: Sean McNeil <sean@mcneil.com>
|
128041 |
08-Apr-2004 |
deischen |
After forking and initializing the library to single-threaded mode (where the forked thread is the one and only thread and is marked as system scope), set the system scope flag before initializing the signal mask. This prevents trying to use internal locks that haven't yet been initialized.
Reported by: Dan Nelson <dnelson at allantgroup.com> Reviewed by: davidxu
|
127102 |
17-Mar-2004 |
davidxu |
Fix a POSIX conformance bug. POSIX says sigwait should return error number in return value not in errno.
|
126952 |
14-Mar-2004 |
bde |
Fixed a misspelling of 0 as NULL.
|
125668 |
10-Feb-2004 |
cperciva |
style cleanup: Remove duplicate $FreeBSD$ tags.
These files had tags after the copyright notice, inside the comment block (incorrect, removed), and outside the comment block (correct).
Approved by: rwatson (mentor)
|
125522 |
06-Feb-2004 |
deischen |
Add cancellation point to sem_wait() and sem_timedwait() for pshared semaphores. Also add cancellation cleanup handlers to keep semaphores in a consistent state.
Submitted in part by: davidxu Reviewed by: davidxu
|
125373 |
03-Feb-2004 |
deischen |
Provide a userland version of non-pshared semaphores and add cancellation points to sem_wait() and sem_timedwait(). Also make sem_post signal-safe.
|
124606 |
17-Jan-2004 |
davidxu |
Return EPERM if mutex owner is not current thread but it tries to unlock the mutex, old code confuses some programs when it returns EINVAL.
Noticed by: bland
|
124252 |
08-Jan-2004 |
deischen |
Add a simple work-around for deadlocking on recursive read locks on a rwlock while there are writers waiting. We normally favor writers but when a reader already has at least one other read lock, we favor the reader. We don't track all the rwlocks owned by a thread, nor all the threads that own a rwlock -- we just keep a count of all the read locks owned by a thread.
PR: 24641
|
124095 |
03-Jan-2004 |
davidxu |
Kernel now supports per-thread sigaltstack, follow the change to enable sigaltstack for scope system thread.
|
124056 |
02-Jan-2004 |
davidxu |
Return error code in errno, not in return value.
|
124055 |
02-Jan-2004 |
davidxu |
Fix a typo.
|
123975 |
29-Dec-2003 |
davidxu |
Forgot to commit this file for last commit. :(
|
123974 |
29-Dec-2003 |
davidxu |
Implement sigaltstack() as per-threaded. Current only scope process thread is supported, for scope system process, kernel signal bits need to be changed.
Reviewed by: deischen Tested on : i386 amd64 ia64
|
123933 |
28-Dec-2003 |
davidxu |
Correctly retrieve sigaction flags.
|
123668 |
19-Dec-2003 |
davidxu |
Replace a comment with more accurated one, memory heap is now protected by new fork() wrapper.
|
123666 |
19-Dec-2003 |
davidxu |
Code clean up, remove unused MACROS and function prototypes.
|
123365 |
09-Dec-2003 |
deischen |
accept() returns a file descriptor when it succeeds which is very likely to be non-zero. When leaving the cancellation point, check the return value against -1 to see if cancellation should be checked. While I'm here, make the same change to connect() just to be consisitent.
Pointed out by: davidxu
|
123356 |
09-Dec-2003 |
deischen |
Remove an unused struct definition.
|
123355 |
09-Dec-2003 |
deischen |
Add cancellation points for accept() and connect().
|
123314 |
09-Dec-2003 |
davidxu |
Use mutex instead of low level thread lock to implement spinlock, this avoids signal to be blocked when otherwise it can be handled.
|
123312 |
09-Dec-2003 |
davidxu |
Rename _thr_enter_cancellation_point to _thr_cancel_enter, rename _thr_leave_cancellation_point to _thr_cancel_leave, add a parameter to _thr_cancel_leave to indicate whether cancellation point should be checked, this gives us an option to not check cancallation point if a syscall successfully returns to avoid any leaks, current I have creat(), open() and fcntl(F_DUPFD) to not check cancellation point after they sucessfully returned.
Replace some members in structure kse with bit flags to same some memory.
Conditionally compile THR_ASSERT to nothing if _PTHREAD_INVARIANTS is not defined.
Inline some small functions in thr_cancel.c.
Use __predict_false in thr_kern.c for some executed only once code.
Reviewd by: deischen
|
123310 |
09-Dec-2003 |
davidxu |
More reliably check timeout for pthread_mutex_timedlock.
|
123297 |
08-Dec-2003 |
deischen |
Go back to using rev 1.18 where thread locks are used instead of KSE locks for [libc] spinlock implementation. This was previously backed out because it exposed a bug in ia64 implementation.
OK'd by: marcel
|
123048 |
29-Nov-2003 |
davidxu |
1.Macro optimizing KSE_LOCK_ACQUIRE and THR_LOCK_ACQUIRE to use static fall through branch predict as suggested in INTEL IA32 optimization guide.
2.Allocate siginfo arrary separately to avoid pthread to be allocated at 2K boundary, which hits L1 address alias problem and causes context switch to be slow down.
3.Simplify context switch code by removing redundant code, code size is reduced, so it is expected to run faster.
Reviewed by: deischen Approved by: re (scottl)
|
123047 |
29-Nov-2003 |
davidxu |
Remove surplus mmap() call for stack guard page in init_private, it is done in init_main_thread. Also don't initialize lock and lockuser again for initial thread, it is already done by _thr_alloc().
Reviewed by: deischen Approved by: re (scottl)
|
122801 |
16-Nov-2003 |
deischen |
Back out last change and go back to using KSE locks instead of thread locks until we know why this breaks ia64.
Reported by: marcel
|
122338 |
09-Nov-2003 |
davidxu |
If a thread in critical region got a synchronous signal, according current signal handling mode, there is no chance to handle the signal, something must be wrong in the library, just call kse_thr_interrupt to dump its core. I have the code for a long time, but forgot to commit it.
|
122299 |
08-Nov-2003 |
davidxu |
Use THR lock instead of KSE lock to avoid scheduler be blocked in spinlock.
Reviewed by: deischen
|
122131 |
05-Nov-2003 |
deischen |
style(9)
Reviewed by: bde
|
122130 |
05-Nov-2003 |
deischen |
Don't declare the malloc lock; use the declaration provided in libc.
Noticed by: bde
|
122089 |
05-Nov-2003 |
davidxu |
Add pthread_atfork() source code. Dan forgot to commit this file.
|
122075 |
04-Nov-2003 |
deischen |
Add an implementation for pthread_atfork().
Aside from the POSIX requirements for pthread_atfork(), when fork()ing, take the malloc lock to keep malloc state consistent in the child.
Reviewed by: davidxu
|
122073 |
04-Nov-2003 |
deischen |
Add the ability to reinitialize a spinlock (libc/libpthread internal lock, not a pthread spinlock).
Reviewed by: davidxu
|
122072 |
04-Nov-2003 |
deischen |
s/foo()/foo(void)/
Add a blank line after a variable declaration.
|
122071 |
04-Nov-2003 |
deischen |
Libpthread uses the convention that all of its (non-weak) symbols begin with underscores and provide weak definitions without underscores. Make the pthread spinlock conform to this convention.
|
122070 |
04-Nov-2003 |
deischen |
Add the ability to reinitialize a mutex (internally, not a userland API).
Reviewed by: davidxu
|
120897 |
08-Oct-2003 |
davidxu |
Fix some comments for last commit.
|
120896 |
08-Oct-2003 |
davidxu |
Complete cancellation support for M:N threads, check cancelling flag when thread state is changed from RUNNING to WAIT state and do some cancellation operations for every cancellable state.
Reviewed by: deischen
|
120895 |
08-Oct-2003 |
davidxu |
Use thread lock instead of scheduler lock to eliminate lock contention for all wrapped syscalls under SMP.
Reviewed by: deischen
|
120567 |
29-Sep-2003 |
davidxu |
When concurrency level is reduced and a kse is exiting, make sure no other threads are still referencing the kse by migrating them to initial kse.
Reviewed by: deischen
|
120554 |
28-Sep-2003 |
davidxu |
Remove unused variable.
|
120436 |
25-Sep-2003 |
davidxu |
pthread API should return error code in return value not in errno.
Reviewed by: deischen
|
120429 |
25-Sep-2003 |
davidxu |
If syscall failed, restore old sigaction and return error to thread.
|
120403 |
24-Sep-2003 |
davidxu |
As comments in _mutex_lock_backout state, only current thread can clear the pointer to mutex, not the thread doing mutex handoff. Because _mutex_lock_backout does not hold scheduler lock while testing THR_FLAGS_IN_SYNCQ and then reading mutex pointer, it is possible mutex owner begin to unlock and handoff the mutex to the current thread, and mutex pointer will be cleared to NULL before current thread reading it, so current thread will end up with deferencing a NULL pointer, Fix the race by making mutex waiters to clear their mutex pointers. While I am here, also save inherited priority in mutex for PTHREAD_PRIO_INERIT mutex in mutex_trylock_common just like what we did in mutex_lock_common.
|
120370 |
23-Sep-2003 |
davidxu |
Free thread name memory if there is.
|
120338 |
22-Sep-2003 |
davidxu |
Save and restore timeout field for signal frame just like what we did for interrupted field. Also in _thr_sig_handler, retrieve current signal mask from kernel not from ucp, the later is pre-unioned mask, not current signal mask.
|
120325 |
22-Sep-2003 |
davidxu |
Print waitset correctly.
|
120263 |
19-Sep-2003 |
marcel |
Make KSE_STACKSIZE machine dependent by moving it from thr_kern.c to pthread_md.h. This commit only moves the definition; it does not change it for any of the platforms. This more easily allows 64-bit architectures (in particular) to pick a slightly larger stack size.
|
120197 |
18-Sep-2003 |
davidxu |
pthread api should return error code in return value, not in errno.
|
120109 |
16-Sep-2003 |
davidxu |
Fix a typo. Also turn on PTHREAD_SCOPE_SYSTEM after fork().
|
120079 |
15-Sep-2003 |
davidxu |
Fix bogus comment and assign sigmask in critical region, use SIG_CANTMASK to remove unmaskable signal masks.
|
120078 |
15-Sep-2003 |
davidxu |
Fix a bogus comment, sigmask must be maintained correctly, it will be inherited in pthread_create.
|
120074 |
14-Sep-2003 |
davidxu |
1. Allocating and freeing lock related resource in _thr_alloc and _thr_free to avoid potential memory leak, also fix a bug in pthread_create, contention scope should be inherited when PTHREAD_INHERIT_SCHED is set, and also check right field for PTHREAD_INHERIT_SCHED, scheduling inherit flag is in sched_inherit. 2. Execute hooks registered by atexit() on thread stack but not on scheduler stack. 3. Simplify some code in _kse_single_thread by calling xxx_destroy functions.
Reviewed by: deischen
|
120073 |
14-Sep-2003 |
davidxu |
When invoking an old style signal handler, use true traditional BSD style to invoke signal handler.
Reviewed by: deischen
|
120072 |
14-Sep-2003 |
davidxu |
Respect POSIX specification, a value return from pthread_attr_getguardsize should be a value past to pthread_attr_setguardsize, not a rounded up value. Also fix a stack size matching bug in thr_stack.c, now stack matching code uses number of pages but not bytes length to match stack size, so for example, size 512 bytes and size 513 bytes should both match 1 page stack size.
Reviewed by: deischen
|
120069 |
14-Sep-2003 |
davidxu |
Avoid garbage bits in c_flags by direct assigning value.
Reviewed by: deischen
|
120068 |
14-Sep-2003 |
davidxu |
If user is seting scope process flag, clear PTHREAD_SCOPE_SYSTEM bit accordingly.
Reviewed by: deischen
|
120066 |
14-Sep-2003 |
davidxu |
Check invalid parameter and return EINVAL.
Reviewed by: deischen
|
119928 |
09-Sep-2003 |
davidxu |
Original pthread_once code has memory leak if pthread_once_t is used in a shared library or any other dyanmic allocated data block, once pthread_once_t is initialized, a mutex is allocated, if we unload the shared library or free those data block, then there is no way to deallocate the mutex, result is memory leak. To fix this problem, we don't use mutex field in pthread_once_t, instead, we use its state field and an internal mutex and conditional variable in libkse to do any synchronization, we introduce a third state IN_PROGRESS to wait if another thread is already in invoking init_routine(). Also while I am here, make pthread_once() conformed to pthread cancellation point specification.
Reviewed by: deischen
|
119909 |
09-Sep-2003 |
davidxu |
Add code to support pthread spin lock.
Reviewed by: deischen
|
119790 |
06-Sep-2003 |
davidxu |
Add small piece of code to support pthread_rwlock_timedrdlock and pthread_rwlock_timedrwlock.
|
119736 |
04-Sep-2003 |
davidxu |
Add code to support barrier synchronous object and implement pthread_mutex_timedlock().
Reviewed by: deischen
|
119733 |
04-Sep-2003 |
davidxu |
Remove repeated macro THR_IN_CONDQ.
|
119732 |
04-Sep-2003 |
davidxu |
Allow hooks registered by atexit() to run with current thread pointer set, without this change, my atexit test dumps core.
|
119723 |
03-Sep-2003 |
deischen |
Don't assume sizeof(long) = sizeof(int) on x86; use int instead of long types for low-level locks.
Add prototypes for some internal libc functions that are wrapped by the library as cancellation points.
Add memory barriers to alpha atomic swap functions (submitted by davidxu).
Requested by: bde
|
119700 |
03-Sep-2003 |
davidxu |
Move kse_wakeup_multi call to just before KSE_SCHED_UNLOCK.
Tested on: SMP
|
119577 |
30-Aug-2003 |
deischen |
Allow the concurrency level to be reduced.
Reviewed by: davidxu
|
119249 |
21-Aug-2003 |
davidxu |
Repost masked signal to kernel for scope system thread, it hardly happens in real world.
Reviewed by: deischen
|
119177 |
20-Aug-2003 |
davidxu |
_thr_sig_check_pending is also called by scope system thread when it leaves critical region, we wrap some syscalls for thread cancellation point, and when syscalls returns, we call _thr_leave_cancellation_point, at the time if a signal comes in, it would be buffered, and when the thread leaves _thr_leave_cancellation_point, buffered signals will be processed, to avoid messing up normal syscall errno, we should save and restore errno around signal handling code.
|
119154 |
20-Aug-2003 |
deischen |
Add back a loop for up to PTHREAD_DESTRUCTOR_ITERATIONS to destroy thread-specific data. Display a warning when thread specific data remains after PTHREAD_DESTRUCTOR_ITERATIONS.
Reviewed by: davidxu
|
119117 |
19-Aug-2003 |
davidxu |
Support printing 64 bits pointer and long integer.
Reviewed by: deischen
|
119099 |
19-Aug-2003 |
davidxu |
Save and restore errno around sigprocmask.
|
119064 |
18-Aug-2003 |
davidxu |
Direct call exit if thread was never created. This makes it safe to call pthread_exit in main() without creating any thread.
Tessted by: deischen
|
119063 |
18-Aug-2003 |
davidxu |
Treat initial thread as scope system thread when KSE mode is not activated yet, so we can protect some locking code from being interrupted by signal handling. When KSE mode is turned on, reset the thread flag to scope process except we are running in 1:1 mode which we needn't turn it off. Also remove some unused member variables in structure kse.
Tested by: deischen
|
118989 |
16-Aug-2003 |
davidxu |
If threaded mode is not turned on yet, direct call __sys_sched_yield.
|
118985 |
16-Aug-2003 |
davidxu |
Keep initial kse and kse group just like we keep initial thread, Don't free them, so some code can still reference them.
Reviewed by: deischen
|
118984 |
16-Aug-2003 |
davidxu |
Access user provided pointer out of lock, and also check the case when a key is less than 0.
|
118850 |
13-Aug-2003 |
davidxu |
Always set tcb for bound thread, and switch tcb for M:N thread at correct time.
|
118817 |
12-Aug-2003 |
davidxu |
Correctly set current tcb. This fixes some IA64/KSE problems.
Reviewed by: deischen, julian
|
118748 |
10-Aug-2003 |
davidxu |
Add some quick pathes to exit process when signal action is default and signal can causes process to exit.
Reviewed by: deischen
|
118747 |
10-Aug-2003 |
davidxu |
Initialize rtld lock just before turning on thread mode and uninitialize rtld lock after thread mode shutdown.
|
118746 |
10-Aug-2003 |
davidxu |
If thread mode is not activated yet, just call __sys_fork() directly, otherwise masks all signals until fork() returns, in child process, we reset library state before restoring signal masks until we reach a safe to point.
Reviewed by: deischen
|
118745 |
10-Aug-2003 |
davidxu |
Tweak rtld lock to allow recursive on reader lock and detect recursive on writer lock. This is first cut at rwlock for rtld.
Submitted by: desichen
|
118744 |
10-Aug-2003 |
davidxu |
If thread mode is not activated yet, don't do extra work.
Reviewed by: deischen
|
118676 |
08-Aug-2003 |
davidxu |
o Add code to GC freed KSEs and KSE groups o Fix a bug in kse_free_unlocked(), kcb_dtor shouldn't be called because the KSE is cached and will be resued in _kse_alloc().
Reviewed by: deischen
|
118516 |
06-Aug-2003 |
deischen |
Don't call kse_set_curthread() when scheduling a new bound thread. It should only be called by the current kse and never by a KSE on behalf of another.
Submitted by: davidxu
|
118514 |
06-Aug-2003 |
marcel |
Fix an off by one error in the number of arguments passed to makecontext(). We only supply 3, not 4. This is mostly harmless, except that on ia64 the garbage can include NaT bits, resulting in NaT consumption faults.
|
118510 |
05-Aug-2003 |
deischen |
Rethink the MD interfaces for libpthread to account for archs that can (or are required to) have per-thread registers.
Tested on i386, amd64; marcel is testing on ia64 and will have some follow-up commits.
Reviewed by: davidxu
|
118254 |
31-Jul-2003 |
davidxu |
sysctlbyname needs size_t type, not int.
|
118206 |
30-Jul-2003 |
deischen |
Don't forget to unlock the scheduler lock. Somehow this got removed from one of my last commits. This only affected priority ceiling mutexes.
Pointy hat to: deischen
|
118075 |
27-Jul-2003 |
davidxu |
Simplify sigwait code a bit by using a waitset and removing oldsigmask.
Reviewed by: deischen
|
117907 |
23-Jul-2003 |
deischen |
Move idle kse wakeup to outside of regions where locks are held. This eliminates ping-ponging of locks, where the idle KSE wakes up only to find the lock it needs is being held. This gives little or no gain to M:N mode but greatly speeds up 1:1 mode.
Reviewed & Tested by: davidxu
|
117758 |
19-Jul-2003 |
davidxu |
Override libc function raise(), in threading mode, raise() will send signal to current thread.
Reviewed by: deischen
|
117715 |
18-Jul-2003 |
deischen |
Cleanup thread accounting. Don't reset a threads timeslice when it blocks; it only gets reset when it yields.
Properly set a thread's default stack guardsize.
Reviewed by: davidxu
|
117714 |
18-Jul-2003 |
deischen |
Add a preemption point when a mutex or condition variable is handed-off/signaled to a higher priority thread. Note that when there are idle KSEs that could run the higher priority thread, we still add the preemption point because it seems to take the kernel a while to schedule an idle KSE. The drawbacks are that threads will be swapped more often between CPUs (KSEs) and that there will be an extra userland context switch (the idle KSE is still woken and will probably resume the preempted thread). We'll revisit this if and when idle CPU/KSE wakeup times improve.
Inspired by: Petri Helenius <pete@he.iki.fi> Reviewed by: davidxu
|
117706 |
17-Jul-2003 |
davidxu |
o Eliminate upcall for PTHREAD_SYSTEM_SCOPE thread, now it is system bound thread and when it is blocked, no upcall is generated.
o Add ability to libkse to allow it run in pure 1:1 threading mode, defining SYSTEM_SCOPE_ONLY in Makefile can turn on this option.
o Eliminate code for installing dummy signal handler for sigwait call.
o Add hash table to find thread.
Reviewed by: deischen
|
117366 |
09-Jul-2003 |
davidxu |
Don't resume sigwait thread If signal is masked.
|
117353 |
09-Jul-2003 |
davidxu |
POSIX says if a thread is in sigwait state, although a signal may not in its waitset, but if the signal is not masked by the thread, the signal can interrupt the thread and signal action can be invoked by the thread, sigwait should return with errno set to EINTR. Also save and restore thread internal state(timeout and interrupted) around signal handler invoking.
|
117345 |
09-Jul-2003 |
davidxu |
Restore signal mask correctly after fork().
|
117344 |
09-Jul-2003 |
davidxu |
Save and restore thread's error code around signal handling.
Reviewed by: deischen
|
117305 |
07-Jul-2003 |
davidxu |
Correctly print signal mask, the bug was introduced by cut and paste in last commit.
|
117301 |
07-Jul-2003 |
davidxu |
Add a newline to debug message.
|
117300 |
07-Jul-2003 |
davidxu |
Avoid accessing user provided parameters in critical region.
Reviewed by: deischen
|
117297 |
07-Jul-2003 |
davidxu |
Print thread's scope, also print signal mask for every thread and print it in one line.
|
117217 |
04-Jul-2003 |
davidxu |
Correctly lock/unlock signal lock. I must be in bad state, need to sleep.
|
117216 |
04-Jul-2003 |
davidxu |
Always check and restore sigaction previously set, also access user parameter outside of lock.
|
117197 |
03-Jul-2003 |
davidxu |
If select() is only used for sleep, convert it to nanosleep, it only need purely wait in user space.
|
117193 |
03-Jul-2003 |
davidxu |
Check if thread is in critical region, only testing check_pending is not enough.
|
117165 |
02-Jul-2003 |
davidxu |
Set unlock_mutex to 1 after locked mutex. Use THR_CONDQ_CLEAR not THR_COND_SET in cond_queue_deq, current cond_queue_deq is not used.
|
117162 |
02-Jul-2003 |
davidxu |
Fix typo.
|
117066 |
30-Jun-2003 |
davidxu |
Because there are only _SIG_MAXSIG elements in thread siginfo array, use [signal number - 1] as subscript to access the array.
|
117063 |
30-Jun-2003 |
davidxu |
Remove surplus unlocking code I accidentally checked in. This won't be triggered until LDT entry is exhausted.
|
116977 |
28-Jun-2003 |
davidxu |
o Use a daemon thread to monitor signal events in kernel, if pending signals were changed in kernel, it will retrieve the pending set and try to find a thread to dispatch the signal. The dispatching process can be rolled back if the signal is no longer in kernel.
o Create two functions _thr_signal_init() and _thr_signal_deinit(), all signal action settings are retrieved from kernel when threading mode is turned on, after a fork(), child process will reset them to user settings by calling _thr_signal_deinit(). when threading mode is not turned on, all signal operations are direct past to kernel.
o When a thread generated a synchoronous signals and its context returned from completed list, UTS will retrieve the signal from its mailbox and try to deliver the signal to thread.
o Context signal mask is now only used when delivering signals, thread's current signal mask is always the one in pthread structure.
o Remove have_signals field in pthread structure, replace it with psf_valid in pthread_signal_frame. when psf_valid is true, in context switch time, thread will backout itself from some mutex/condition internal queues, then begin to process signals. when a thread is not at blocked state and running, check_pending indicates there are signals for the thread, after preempted and then resumed time, UTS will try to deliver signals to the thread.
o At signal delivering time, not only pending signals in thread will be scanned, process's pending signals will be scanned too.
o Change sigwait code a bit, remove field sigwait in pthread_wait_data, replace it with oldsigmask in pthread structure, when a thread calls sigwait(), its current signal mask is backuped to oldsigmask, and waitset is copied to its signal mask and when the thread gets a signal in the waitset range, its current signal mask is restored from oldsigmask, these are done in atomic fashion.
o Two additional POSIX APIs are implemented, sigwaitinfo() and sigtimedwait().
o Signal code locking is better than previous, there is fewer race conditions.
o Temporary disable most of code in _kse_single_thread as it is not safe after fork().
|
116976 |
28-Jun-2003 |
davidxu |
Use mmap retuned value.
Reviewed by: deischen
|
116975 |
28-Jun-2003 |
davidxu |
Temporary disable rwlock based code, replace it with low level KSE locking code until rtld-elf and libkse can cooperate better, those code can be restored.
Reviewed by: deischen
|
116974 |
28-Jun-2003 |
davidxu |
Write new thread pointer back only when success.
Reviewed by: deischen
|
116973 |
28-Jun-2003 |
davidxu |
After thread was interrupted by signal, it should relock mutex.
Reviewed by: deischen
|
116972 |
28-Jun-2003 |
davidxu |
if thread is exiting, just returns. kse_thr_interrupt interface was changed, it needs signal parameter, pass -1 to it, it indicates to interrupt syscall.
Reviewed by: deischen
|
116773 |
24-Jun-2003 |
marcel |
Explicitly widen int types before casting to pointer types. On 64-bit platforms the compiler warns about incompatible integer/pointer casts and on ia64 this generally is bad news. We know that what we're doing here is valid/correct, so suppress the warning. No functional change.
Sleeps better: marcel
|
116771 |
23-Jun-2003 |
marcel |
Untangle the inter-dependency of kse types and ksd types/functions by moving the definition of struct ksd to pthread_md.h and removing the inclusion of ksd.h from thr_private.h (which has the definition of struct kse and kse_critical_t). This allows ksd.h to have inline functions that use struct kse and kse_critical_t and generally yields a cleaner implementation at the cost of not having all ksd related types/definitions in one header.
Implement the ksd functionality on ia64 by using inline functions and permanently remove ksd.c from the ia64 specific makefile.
This change does not clean up the i386 specific version of ksd.h.
NOTE: The ksd code on ia64 abuses the tp register in the same way as it is abused in libthr in that it is incompatible with the runtime specification. This will be address when support for TLS hits the tree.
|
116719 |
23-Jun-2003 |
marcel |
Change the definition of _ksd_curkse, _ksd_curthread and _ksd_readandclear_tmbx to be function-like. That way we can define them as inline functions or create prototypes for them.
This change allows the ksd interface on ia64 to be fully inlined.
|
116514 |
18-Jun-2003 |
davidxu |
Don't lock scheduler lock twice.
|
116061 |
08-Jun-2003 |
deischen |
After selecting a thread to handle a signal and taking its scheduling lock, make sure that the thread still has the signal unmasked.
Make a debug statement conditional on debugging being enabled.
|
116060 |
08-Jun-2003 |
deischen |
Insert threads at the end of the free thread list so that the chance of getting the same thread id when allocating a new thread is reduced. This won't work if the application creates a new thread for every time a thread exits, but we're still within the allowances of POSIX.
|
115828 |
04-Jun-2003 |
davidxu |
Only init _thread_sigact once, needn't init it again after a fork().
Obtained from: deischen
|
115827 |
04-Jun-2003 |
davidxu |
Despite whether threaded mode is turned on, always save thread's signal mask.
|
115798 |
04-Jun-2003 |
davidxu |
KMF_DONE is now in /sys/sys/kse.h, no longer need to define it here.
|
115761 |
03-Jun-2003 |
davidxu |
Free memory of internal low level lock when mutex and condition variable are destroyed.
Submitted by: tegge
|
115413 |
30-May-2003 |
davidxu |
Save THR_FLAGS_IN_TDLIST in signal frame, otherwise if a thread received a signal will can not be removed from thread list after it exited.
Reviewed by: deischen Approved by: re (jhb)
|
115399 |
30-May-2003 |
kan |
Attempt to eliminate PLT relocations from rwlock aquire/release path, making them suitable for direct use by the dynamic loader.
Register libpthread-specific locking API with rtld on startup.
This still has some rough edges with signals which should be addresses later.
Approved by: re (scottl)
|
115398 |
30-May-2003 |
deischen |
Call the __sys_sigprocmask(the system call) when sigprocmask() is called and the application is not threaded. This works around a problem when an application that hasn't yet become threaded tries to jump out of a signal handler.
Reported by: mbr Approved by: re@ (rwatson)
|
115381 |
29-May-2003 |
deischen |
Don't really spin on a spinlock; silently convert it to the same low-level lock used by the libpthread implementation. In the future, we'll eliminate spinlocks from libc but that will wait until after 5.1-release.
Don't call an application signal handler if the handler is the same as the library-installed handler. This seems to be possible after a fork and is the cause of konsole hangs.
Approved by: re@ (jhb)
|
115278 |
24-May-2003 |
deischen |
Change low-level locking a bit so that we can tell if a lock is being waitied on.
Fix a races in join and cancellation.
When trying to wait on a CV and the library is not yet threaded, make it threaded so that waiting actually works.
When trying to nanosleep() and we're not threaded, just call the system call nanosleep instead of adding the thread to the wait queue.
Clean up adding/removing new threads to the "all threads queue", assigning them unique ids, and tracking how many active threads there are. Do it all when the thread is added to the scheduling queue instead of making pthread_create() know how to do it.
Fix a race where a thread could be marked for signal delivery but it could be exited before we actually add the signal to it.
Other minor cleanups and bug fixes.
Submitted by: davidxu Approved by: re@ (blanket for libpthread)
|
115173 |
19-May-2003 |
deischen |
Eek, staticize a couple of functions that shouldn't be external (initialize()!).
Remove cancellation points from _pthread_cond_wait and _pthread_cond_timedwait (single underscore versions are libc private functions). Point the weak reference(!) for these functions to the versions with cancellation points.
Approved by: re@(blanket till 5/19) Pointed out by: kan (cancellation point bug)
|
115080 |
16-May-2003 |
deischen |
Add a method of yielding the current thread with the scheduler lock held (_thr_sched_switch_unlocked()) and use this to avoid dropping the scheduler lock and having the scheduler retake the same lock again.
Add a better way of detecting if a low-level lock is in use.
When switching out a thread due to blocking in the UTS, don't switch to the KSE's scheduler stack only to switch back to another thread. If possible switch to the new thread directly from the old thread and avoid the overhead of the extra context switch.
Check for pending signals on a thread when entering the scheduler and add them to the threads signal frame. This includes some other minor signal fixes.
Most of this was a joint effor between davidxu and myself.
Reviewed by: davidxu Approved by: re@ (blanket for libpthread)
|
114767 |
06-May-2003 |
deischen |
Make pthread_join() async-cancel-safe. David was going to commit this, but I think he's asleep and want to be sure it gets in before the freeze.
Submitted by: davidxu
|
114688 |
05-May-2003 |
davidxu |
call dump_queues() only when DEBUG_THREAD_KERN is defined, save some cpu cycles.
|
114664 |
04-May-2003 |
deischen |
Fix suspend and resume.
Submitted (in part) by: Kazuaki Oda <kaakun@highway.ne.jp>
|
114524 |
02-May-2003 |
davidxu |
Handle thread canceled case, it is same as signal caused backout, but will break out of loop.
|
114295 |
30-Apr-2003 |
deischen |
Move the mailbox to the beginning of the thread and align the thread so that the context (SSE FPU state) is also aligned.
|
114267 |
30-Apr-2003 |
davidxu |
Call kse_wakeup_mutli() after remove current thread from RUNQ to avoid doing unnecessary idle kse wakeup.
|
114266 |
30-Apr-2003 |
davidxu |
Call kse_wakeup_multi() to wakeup idle KSEs when there are threads ready to run.
|
114254 |
29-Apr-2003 |
deischen |
Create the thread signal lock as a KSE lock (as opposed to a thread lock).
Better protect access to thread state while searching for threads to handle a signal.
Better protect access to process pending signals while processing a thread in sigwait().
Submitted by: davidxu
|
114187 |
28-Apr-2003 |
deischen |
o Don't add a scope system thread's KSE to the list of available KSEs when it's thread exits; allow the GC handler to do that.
o Make spinlock/spinlock critical regions.
The following were submitted by davidxu
o Alow thr_switch() to take a null mailbox argument.
o Better protect cancellation checks.
o Don't set KSE specific data when creating new KSEs; rely on the first upcall of the KSE to set it.
o Add the ability to set the maximum concurrency level and do this automatically. We should have a way to enable/disable this with some sort of tunable because some applications may not want this to be the default.
o Hold the scheduling lock across thread switch calls.
o If scheduling of a thread fails, make sure to remove it from the list of active threads.
o Better protect accesses to a joining threads when the target thread is exited and detached.
o Remove some macro definitions that are now provided by <sys/kse.h>.
o Don't leave the library in threaded mode if creation of the initial KSE fails.
o Wakeup idle KSEs when there are threads ready to run.
o Maintain the number of threads active in the priority queue.
|
114180 |
28-Apr-2003 |
deischen |
Use the correct link entry for walking the list of threads.
While I'm here, use the TAILQ_FOREACH macro instead of a more manual method which was inherited from libc_r (so we could remove elements from the list which isn't needed for libpthread).
Submitted by: Kazuaki Oda <kaakun@highway.ne.jp>
|
113942 |
23-Apr-2003 |
deischen |
Protect thread errno from being changed while operating on behalf of the KSE.
Add a kse_reinit function to reinitialize a reused KSE.
Submitted by: davidxu
|
113881 |
22-Apr-2003 |
deischen |
Set the quantum for scope system threads to 0 (no quantum).
|
113871 |
22-Apr-2003 |
deischen |
Add a working pthread_[gs]etconcurrency. Initial null implementation provided by Sergey A. Osokin <osa@freebsd.org.ru>.
In order to test this on a single CPU machine, you need to:
sysctl kern.threads.debug=1 sysctl kern.threads.virtual_cpu=2
|
113870 |
22-Apr-2003 |
deischen |
Add a couple asserts to pthread_cond_foo to ensure the (low-level) lock level is 0. Thus far, the threads implementation doesn't use mutexes or condition variables so the lock level should be 0.
Save the return value when trying to schedule a new thread and use this to return an error from pthread_create().
Change the max sleep time for an idle KSE to 1 minute from 2 minutes.
Maintain a count of the number of KSEs within a KSEG.
With these changes scope system threads seem to work, but heavy use of them crash the kernel (supposedly VM bugs).
|
113786 |
21-Apr-2003 |
deischen |
Add an i386-specifc hack to always set %gs. There still seems to be instances where the kernel doesn't properly save and/or restore it.
Use noupcall and nocompleted flags in the KSE mailbox. These require kernel changes to work which will be committed sometime later. Things still work without the changes.
Remove the general kse entry function and use two different functions -- one for scope system threads and one for scope process threads. The scope system function is not yet enabled and we use the same function for all threads at the moment.
Keep a copy of the KSE stack for the case that a KSE runs a scope system thread and uses the same stack as the thread (no upcalls are generated, so a separate stack isn't needed). This isn't enabled yet.
Use a separate field for the KSE waiting flag. It isn't correct to use the mailbox flags field.
The following fixes were provided by David Xu:
o Initialize condition variable locks with thread versions of the low-level locking functions instead of the kse versions.
o Enable threading before creating the first thread instead of after.
o Don't enter critical regions when trying to malloc/free or call functions that malloc/free.
o Take the scheduling lock when inheriting thread attributes.
o Check the attribute's stack pointer instead of the attributes stack size for null when allocating a thread's stack.
o Add a kseg reinit function so we don't have to destroy and then recreate the same lock.
o Check the return value of kse_create() and return an appropriate error if it fails.
o Don't forget to destroy a thread's locks when freeing it.
o Examine the correct flags word for checking to see if a thread is in a synchronization queue.
Things should now work on an SMP kernel.
|
113662 |
18-Apr-2003 |
deischen |
Remove duplicate $FreeBSD$ id.
|
113661 |
18-Apr-2003 |
deischen |
Sorry folks; I accidentally committed a patch from what I was working on a couple of days ago. This should be the most recent changes.
Noticed by: davidxu
|
113658 |
18-Apr-2003 |
deischen |
Revamp libpthread so that it has a chance of working in an SMP environment. This includes support for multiple KSEs and KSEGs.
The ability to create more than 1 KSE via pthread_setconcurrency() is in the works as well as support for PTHREAD_SCOPE_SYSTEM threads. Those should come shortly.
There are still some known issues which davidxu and I are working on, but it'll make it easier for us by committing what we have.
This library now passes all of the ACE tests that libc_r passes with the exception of one. It also seems to work OK with KDE including konqueror, kwrite, etc. I haven't been able to get mozilla to run due to lack of java plugin, so I'd be interested to see how it works with that.
Reviewed by: davidxu
|
112665 |
26-Mar-2003 |
jeff |
- Define a _spinunlock() function so that threading implementations may do more complicated things than just setting the lock to 0. - Implement stubs for this function in libc and the two threading libraries that are currently in the tree.
|
112253 |
15-Mar-2003 |
davidxu |
Backout last commit. Requested by: jhb
|
112218 |
14-Mar-2003 |
davidxu |
Fix a bug in rwlock. When a rwlock was locked by reader threads, a writter thread can block reader threads to get read lock.
|
111928 |
05-Mar-2003 |
phantom |
Fix cut'n'paste error
Noticed by: julian
|
111846 |
03-Mar-2003 |
phantom |
MFlibc_r: add and document pthread_attr_get_np() function.
|
111542 |
26-Feb-2003 |
davidxu |
Fix compiling error.
|
111360 |
23-Feb-2003 |
mini |
Insert threads interrupted by a signal while running onto the run queue.
|
111359 |
23-Feb-2003 |
mini |
Add signal logic to the build.
|
111035 |
17-Feb-2003 |
mini |
Deliver signals posted via an upcall to the appropriate thread.
|
110677 |
11-Feb-2003 |
alfred |
Actually link in the attr_{set,get}stack.
|
110636 |
10-Feb-2003 |
alfred |
Add pthread_attr_getstack() and pthread_attr_setstack().
Submitted by: Craig Rodrigues <rodrigc@attbi.com>
|
107202 |
24-Nov-2002 |
mini |
Schedule spinlocked threads by moving them through the work queue, instead of the wait queue.
Approved by: re (blanket) Stolen from: davidxu
|
107201 |
24-Nov-2002 |
mini |
Get the wall clock time from the KSE mailbox, rather than doing another syscall.
|
107102 |
20-Nov-2002 |
davidxu |
Fix idle timeout bug, use correct current time of day.
|
106786 |
12-Nov-2002 |
mini |
Schedule an idle context to block until timeouts expire without blocking further upcalls.
|
106193 |
30-Oct-2002 |
mini |
Make pthread_sigmask(3) operate on the thread signal mask, not the process signal mask.
|
106191 |
30-Oct-2002 |
mini |
Use KSE to schedule threads.
|
104368 |
02-Oct-2002 |
robert |
Add the 'restrict' type qualifier to the prototypes of `sigaction', `sigprocmask', `sigaltstack', and `sigwait' as well as to the prototypes of the apparantly unimplemented functions `sigtimedwait' and `sigwaitinfo'. This complies with IEEE Std 1003.1-2001.
|
103419 |
16-Sep-2002 |
mini |
Make libpthread KSE aware.
Reviewed by: deischen, julian Approved by: -arch
|
103388 |
16-Sep-2002 |
mini |
Make the changes needed for libpthread to compile in its new home. The new libpthread will provide POSIX threading support using KSE. These files were previously repo-copied from src/lib/libc_r.
Reviewed by: deischen Approved by: -arch
|
102590 |
29-Aug-2002 |
deischen |
Remove much of the dereferencing of the fd table entries to look at file flags and replace it with functions that will avoid null pointer checks.
MFC to be done by archie ;-)
PR: 42100 Reviewed by: archie, robert MFC after: 3 days
|
102586 |
29-Aug-2002 |
archie |
Make the libc_r version of select() set the readable or writable file descriptor bit if poll() returns POLLERR, POLLHUP, or POLLNVAL. Othewise, it's possible for select() to return successfully but with no bits set.
Reviewed by: deischen MFC after: 3 days PR: bin/42175
|
102546 |
29-Aug-2002 |
archie |
When poll(2)'ing for readability or writability of a file descriptor on behalf of a thread, we should check the POLLERR, POLLHUP, and POLLNVAL flags as well to wake up the thread in these cases.
Suggested by: deischen MFC after: 3 days
|
102411 |
25-Aug-2002 |
charnier |
Replace various spelling with FALLTHROUGH which is lint()able
|
99660 |
09-Jul-2002 |
deischen |
Oops, forgot to set the suspended flag for threads that are created initially suspended. This was preventing such threads from getting resumed.
Reported by: Bill Huey <billh@gnuppy.monkey.org>
|
98976 |
28-Jun-2002 |
deischen |
Make sigpending and sigsuspend account for signals that are pending on the process as well as pending on the current thread.
Reported by: Andrew MacIntyre <andymac@bullseye.apana.org.au>
|
98975 |
28-Jun-2002 |
deischen |
Add a wrapper for pselect() in order to make it a cancellation point.
Prompted by: wollman
|
98205 |
14-Jun-2002 |
rwatson |
Missed in earlier commit -- I did cvs commit src/lib/libc. Oops.
|
97204 |
24-May-2002 |
deischen |
Revamp suspend and resume. While I'm here add pthread_suspend_all_np() and pthread_resume_all_np(). These suspend and resume all threads except the current thread, respectively. The existing functions pthread_single_np() and pthread_multi_np(), which formerly had no effect, now exhibit the same behaviour and pthread_suspend_all_np() and pthread_resume_all_np(). These functions have been added mostly for the native java port.
Don't allow the uthread kernel pipe to use the same descriptors as stdio. Mostily submitted by Oswald Buddenhagen <ossi@kde.org>.
Correct some minor style nits.
|
96636 |
15-May-2002 |
alfred |
Undo namespace pollution by prefixing the globals pthread_guard_default and pthread_page_size.
Fix a bunch line wrapping.
Pointed out by: deischen
|
96501 |
13-May-2002 |
alfred |
Don't use PAGE_SIZE in userland, instead use getpagesize(), this is to allow running on other arches when the instructions are supported but the page size granularity is not.
Glanced at by: peter
|
96401 |
11-May-2002 |
alfred |
Use GCC's __attribute__ ((constructor)) mechanism to invoke the pthread startup code rather than a static C++ object since c++ seems to be broken.
This doesn't seem to work for staticically linked program just yet, I'll give that some more work when I get a chance.
|
95948 |
02-May-2002 |
archie |
Make these functions cancellation points like they should be: poll(2), readv(2), select(2), wait4(2), writev(2).
PR: bin/37658 Reviewed by: deischen MFC after: 1 week
|
95947 |
02-May-2002 |
archie |
Make sure calls to pthread_cancel() do not take effect if the target thread is already exiting.
PR: bin/37614 Reviewed by: deischen MFC after: 1 week
|
94808 |
15-Apr-2002 |
obrien |
The GCC developers have made good on their threats against #pragma for 3.1. Use __weak_reference in place of the #pragma.
Submitted by: eischen
|
94265 |
09-Apr-2002 |
asmodai |
Return correct number of total bits set in all fd_set's. Change case of POLLNVAL as an error. Remove POLLHUP and POLLERR from one case, their place is most likely amongst read events.
PR: 33723 Submitted by: Alexander Litvin <archer@whichever.org> Reviewed by: deischen [Provided a small change to the PR patch as well] MFC after: 4 weeks
|
93399 |
29-Mar-2002 |
markm |
Do not use __progname directly (except in [gs]etprogname(3)). Also, make an internal _getprogname() that is used only inside libc. For libc, getprogname(3) is a weak symbol in case a function of the same name is defined in userland.
|
92730 |
19-Mar-2002 |
deischen |
Add the ability to recognize old references to keys, and return NULL when old keys are referenced (after pthread_key_delete()) via pthread_getspecific().
|
92360 |
15-Mar-2002 |
bsd |
Fix the return code from pthread_rwlock_try[rw|rd]lock() functions; these should return EBUSY when the calling thread would block.
MFC after: 2 weeks
|
91762 |
06-Mar-2002 |
deischen |
Properly clear the status of a join operation if the joining thread is canceled or the joinee is detached.
|
90774 |
17-Feb-2002 |
deischen |
Don't rely on <sys/signal.h> to include <sys/ucontext.h>
|
90656 |
14-Feb-2002 |
maxim |
Correct a typo pthread_attr_setscope() function fails unconditionally due to.
PR: misc/30699 Reviewed by: jasone, ru Approved by: jasone, ru MFC after: 1 week
|
90431 |
09-Feb-2002 |
deischen |
This has been sitting in my local tree long enough. Remove the use of an alternate signal stack for handling signals. Let the kernel send signals on the stack of the current thread and teach the threads signal handler how to deliver signals to the current thread if it needs to. Also, always store a threads context as a jmp_buf. Eventually this will change to be a ucontext_t or mcontext_t.
Other small nits. Use struct pthread * instead of pthread_t in internal library routines. The threads code wants struct pthread *, and pthread_t doesn't necessarily have to be the same.
Reviewed by: jasone
|
88401 |
22-Dec-2001 |
deischen |
Use the real function address (instead of function address + 8) for the return address when modifying a jmp_buf to create a new thread context. Also set t12 with the return address.
This should fix libc_r on alpha.
With much detective work by: Bernd Walter <ticso@cicely.de>
|
88092 |
18-Dec-2001 |
deischen |
Fix the retrieval of USRSTACK via sysctl so that it works for 64-bit archs. This should fix libc_r on alpha.
Submitted by: Bernd Walter <ticso@cicely9.cicely.de>
|
88015 |
16-Dec-2001 |
deischen |
When cancelling a thread while in a join operation, do not detach the target thread of the join operation. This allows the cancelled thread to detach the target thread in its cancellation handler. This bug was found by Butenhof's cancel_subcontract test.
Reviewed by: jasone
|
87988 |
15-Dec-2001 |
deischen |
Pull the target thread of a join operation from the correct place when cancelling a thread.
|
86499 |
17-Nov-2001 |
deischen |
Fix pthread_join so that it works if the target thread exits while the joining thread is in a signal handler.
Reported by: Loren James Rittle <rittle@labs.mot.com> MFC after: 1 week
|
85567 |
26-Oct-2001 |
peter |
Make libc_r check the kern.usrstack sysctl instead of using internal kernel #defines to figure out where the stack is located. This stops libc_r from exploding when the kernel is compiled with a different KVM size. IMHO this is all kinda bogus, it would be better to just check %esp and work from that.
|
85559 |
26-Oct-2001 |
ru |
Style: sort __sys_foo() prototypes, tabs -> spaces, etc.
|
85557 |
26-Oct-2001 |
ru |
Removed:
- uthread_signal.c; libc_r does not wrap signal() since 1998/04/29.
- uthread_attr_setprio.c; it was never connected to the build, and pthread_attr_setprio() does not exist in POSIX.
- uthread_sigblock.c and uthread_sigsetmask.c; these were no-ops bloating libc_r's space.
pthread_private.h:
- Removed prototypes of non-syscalls: send().
- Removed prototypes of unused syscalls: sigpending(), sigsuspend(), and select().
- Fixed prototype of fork().
- MFS: Fixed prototypes of <sys/socket.h> syscalls.
Reviewed by: deischen Approved by: deischen, jasone
|
84768 |
10-Oct-2001 |
bde |
Compensate for "Compensate for header dethreading" by backing it out.
|
84610 |
07-Oct-2001 |
deischen |
Limit maximum poll interval to 60 seconds. This prevents an overflow from occurring when converting from a timeval/timespec to a timeout in milliseconds.
Submitted by: dwmalone
|
81918 |
19-Aug-2001 |
jasone |
Fix logic errors in pthread_cond_wait() and pthread_cond_timedwait() that could cause deadlock after interruption due to a signal.
Reviewed by: deischen
|
81750 |
16-Aug-2001 |
jasone |
Fix a bug in canceling joining threads. Do not detach canceled threads.
Reported by: Arno Klaassen <arno@heho.snv.jussieu.fr> Collaboration with: deischen
|
81524 |
11-Aug-2001 |
imp |
Make the name parameter const char *.
|
80021 |
20-Jul-2001 |
jasone |
Implement pthread_attr_[gs]etguardsize(). Non-default-size stacks used to be malloc()ed, but they are now allocated using mmap(), just as the default-size stacks are. A separate cache of stacks is kept for non-default-size stacks.
Collaboration with: deischen
|
78979 |
29-Jun-2001 |
deischen |
Clear the in thread scheduler flag after jumping to the start of a signal handler from the scheduler.
MFC after: 1 week
|
78873 |
27-Jun-2001 |
jasone |
Fix a race condition in pthread_join(). All of the following must occur atomically:
1) Search _thread_list for the thread to join. 2) Search _dead_list for the thread to join. 3) Set the running thread as the joiner.
While we're at it, fix a race in the case where multiple threads try to join on the same thread. POSIX says that the behavior of multiple joiners is undefined, but the fix is cheap as a result of the other fix.
|
76909 |
20-May-2001 |
jasone |
Instead of using a join queue for each thread, use a single pointer to keep track of a joiner. POSIX only supports a single joiner, so this simplification is acceptable.
At the same time, make sure to mark a joined thread as detached so that its resources can be freed.
Reviewed by: deischen PR: 24345
|
76781 |
18-May-2001 |
jasone |
Condition variable waiters are queued in descending priority order, so there is no need to wake all waiters to assure that the highest priority thread is run. As the semaphore code is written, there was no correctness problem, but the change improves sem_post() performance.
Pointed out by: deischen
|
76699 |
16-May-2001 |
jasone |
Mark a thread that is suspended while sleeping as interrupted.
|
76336 |
07-May-2001 |
knu |
Properly copy the P_ALTSTACK flag in struct proc::p_flag to the child process on fork(2).
It is the supposed behavior stated in the manpage of sigaction(2), and Solaris, NetBSD and FreeBSD 3-STABLE correctly do so.
The previous fix against libc_r/uthread/uthread_fork.c fixed the problem only for the programs linked with libc_r, so back it out and fix fork(2) itself to help those not linked with libc_r as well.
PR: kern/26705 Submitted by: KUROSAWA Takahiro <fwkg7679@mb.infoweb.ne.jp> Tested by: knu, GOTOU Yuuzou <gotoyuzo@notwork.org>, and some other people Not objected by: hackers MFC in: 3 days
|
76280 |
04-May-2001 |
deischen |
Move the check for a pending signals to after the thread has been placed in any scheduling queue(s). The process of dispatching signals to a thread can change its state which will attempt to add or remove the thread from any scheduling queue to which it belongs. This can break some assertions if the thread isn't in the queue(s) implied by its state.
When adding dispatching a pending signal to a thread, be sure to remove the signal from the threads set of pending signals.
PR: 27035 Tested by: brian MFC in: 1 week
|
76179 |
01-May-2001 |
markm |
Compenate for header dethreading.
|
75658 |
18-Apr-2001 |
deischen |
Typo; fix open() so that it is not a cancellation point when called from libc.
|
75657 |
18-Apr-2001 |
deischen |
Reinstall the alternate signal stack after a fork.
PR: 25110 Tested by: knu
|
75371 |
10-Apr-2001 |
deischen |
Clean up a bit. Use the correct TAILQ link when walking the thread lists to free thread resources after a fork (in the child). Also remember to free the dead thread list.
|
75369 |
10-Apr-2001 |
deischen |
To be consistent, use the __weak_reference macro from <sys/cdefs.h> instead of #pragma weak to create weak definitions.
Suggested by: bde
|
75188 |
04-Apr-2001 |
tmm |
Activate build of posix1e extensions in libc and libc_r that have been moved in from libposix1e, and deactivate build of the soon-to-be-removed libposix1e.
Approved by: rwatson Obtained from: TrustedBSD Project
|
75187 |
04-Apr-2001 |
tmm |
Add thread safety wrappers for the posix1e syscalls that deal with file descriptors.
Approved by: rwatson Obtained from: TrustedBSD Project
|
75145 |
03-Apr-2001 |
iedowse |
Add a leading underscore to the pthread_main_np function name, and a "#pragma weak" directive linking the external symbol. This matches the other pthread_* definitions, and ensures that users of this function from within libc get the real version, not the stub.
Suggested by: deischen Reviewed by: deischen, alfred
|
74462 |
19-Mar-2001 |
alfred |
Bring in a hybrid of SunSoft's transport-independent RPC (TI-RPC) and associated changes that had to happen to make this possible as well as bugs fixed along the way.
Bring in required TLI library routines to support this.
Since we don't support TLI we've essentially copied what NetBSD has done, adding a thin layer to emulate direct the TLI calls into BSD socket calls.
This is mostly from Sun's tirpc release that was made in 1994, however some fixes were backported from the 1999 release (supposedly only made available after this porting effort was underway).
The submitter has agreed to continue on and bring us up to the 1999 release.
Several key features are introduced with this update: Client calls are thread safe. (1999 code has server side thread safe) Updated, a more modern interface.
Many userland updates were done to bring the code up to par with the recent RPC API.
There is an update to the pthreads library, a function pthread_main_np() was added to emulate a function of Sun's threads library.
While we're at it, bring in NetBSD's lockd, it's been far too long of a wait.
New rpcbind(8) replaces portmap(8) (supporting communication over an authenticated Unix-domain socket, and by default only allowing set and unset requests over that channel). It's much more secure than the old portmapper.
Umount(8), mountd(8), mount_nfs(8), nfsd(8) have also been upgraded to support TI-RPC and to support IPV6.
Umount(8) is also fixed to unmount pathnames longer than 80 chars, which are currently truncated by the Kernel statfs structure.
Submitted by: Martin Blapp <mb@imp.ch> Manpage review: ru Secure RPC implemented by: wpaul
|
74038 |
09-Mar-2001 |
deischen |
Correct a race condition where it was possible for a signaled thread to become stranded and not placed in the run queue.
MFC Candidate
Reported by: tegge
|
73057 |
26-Feb-2001 |
deischen |
Really set the flags for a private mutex (used by libc/libc_r).
|
73056 |
26-Feb-2001 |
deischen |
Limit threads clock resolution to no less than 1000usec (1000Hz).
PR: 25300 Submitted by: Tom Pavel <pavel@alum.mit.edu> (in part)
|
72374 |
11-Feb-2001 |
deischen |
Remove (int) file descriptor locking. It should be up to the application to provide locking for I/O operations. This doesn't break any of my tests, but the old behavior can be restored by compiling with _FDLOCKS_ENABLED. This will eventually be removed when it is obvious it does not cause any problems.
Remove most of flockfile implementation, with the exception of flockfile_debug.
Make error messages more informational (submitted by Mike Heffner <spock@techfour.net>, who's now known as mikeh@FreeBSD.org).
|
71856 |
31-Jan-2001 |
deischen |
s/_thread_sys_write/__sys_write/
Submitted by: Mike Heffner <mheffner@vt.edu>
|
71808 |
29-Jan-2001 |
deischen |
Unbreak world by correctly specifying the prototype for __sys_aio_suspend. A make buildworld was done but not with the committed pthread_private.h.
Reported by: Manfred Antar <null@pozo.com>
|
71771 |
29-Jan-2001 |
deischen |
_exit in libc is now __sys_exit not __sys__exit.
Add another check for thread library initialization (jdp, we really need a way to get _thread_init called at program start before any constructors are run).
|
71581 |
24-Jan-2001 |
deischen |
Add weak definitions for wrapped system calls. In general:
_foo - wrapped system call foo - weak definition to _foo
and for cancellation points:
_foo - wrapped system call __foo - enter cancellation point, call _foo(), leave cancellation point foo - weak definition to __foo
Change use of global _thread_run to call a function to get the currently running thread.
Make all pthread_foo functions weak definitions to _pthread_foo, where _pthread_foo is the implementation. This allows an application to provide its own pthread functions.
Provide slightly different versions of pthread_mutex_lock and pthread_mutex_init so that we can tell the difference between a libc mutex and an application mutex. Threads holding mutexes internal to libc should never be allowed to exit, call signal handlers, or cancel.
Approved by: -arch
|
70702 |
06-Jan-2001 |
obrien |
Force strong references to several pthread_* functions which are weakly referenced to by libgcc.a.
This is needed when linking statically as SVR4 (ie, ELF) behavior is to only link in a module if it satisfies an undefined strong reference from somewhere. (this surprises a lot of people) Things are different when using shared libs, the entire library and its modules and their symbols are available at run-time (when the weak reference is seen to still be unsatisfied and is satisfied on the spot), this is not the case with static libs.
Thus one can have a static binary with unresolved week references, and at run-time dereference a NULL pointer.
Submitted by: eischen
|
70233 |
20-Dec-2000 |
deischen |
When retrieving the time of day in nanosleep(), store it in the global time of day. This costs us nothing, but is a bit of a hack to work around a process blocking and not having the time updated by an ITIMER_PROF signal.
PR: 23679
|
70231 |
20-Dec-2000 |
deischen |
Enable check for pending signals after calling a signal handler. Restoration of a threads signal mask after invocation of a signal handler may allow pending signals to become deliverable.
PR: 23647
|
68941 |
20-Nov-2000 |
deischen |
Change a "while {}" loop to a "do {} while" to allow it to be executed at least once, fixing pthread_mutex_lock() for recursive mutex lock attempts.
Correctly set a threads signal mask while it is executing a signal handler. The mask should be the union of its current mask, the signal being handled, and the mask from the signal action.
Reported by: Dan Nelson <dnelson@emsphone.com>
MFC Candidate
|
68926 |
20-Nov-2000 |
deischen |
Fix MD macros to work for alpha. Without this fix, threads under alpha seem to be totally broke.
MFC Candidate
Submitted by: gallatin
|
68844 |
16-Nov-2000 |
deischen |
Fix a bug where a statically initialized condition variable was not getting properly initialized in pthread_cond_signal() and pthread_cond_broadcast(). Reportedly, this can cause an application to die.
MFC candidate
Submitted by: ade
|
68835 |
16-Nov-2000 |
deischen |
Delete 4 lines of misleading/incorrect comments.
|
68726 |
14-Nov-2000 |
deischen |
When entering the scheduler from the signal handler, tell the kernel to (re)use the alternate signal stack. In this case, we don't return normally from the signal handler, so the kernel still thinks we are using the signal stack. The fixes a nasty bug where the signal handler can start fiddling with the stack of a thread while the handler is actually running on the same stack.
MFC candidate
|
68615 |
11-Nov-2000 |
deischen |
Correct the logic for checking the emptiness of the waiting queue. This fixes a potential problem where the file descriptors would not be polled causing waiting threads to stay waiting. Doh!
MFC candidate.
|
68516 |
09-Nov-2000 |
deischen |
Don't needlessly poll file descriptors when there are no file descriptors needing to be polled (Doh!). Reported by Dan Nelson <dnelson@emsphone.com>.
Don't install and start the scheduling timer until the first thread is created. This prevents the overhead of having a periodic scheduling signal in a single threaded program. Reported by Dan Nelson <dnelson@emsphone.com>.
Allow builtin longjmps out of application installed signal handlers without the need perform any post-handler cleanup:
o Change signal handling to save the threads interrupted context on the stack. The threads current context is now always stored in the same place (in the pthread). If and when a signal handler returns, the interrupted context is copied back to the storage area in the pthread.
o Before calling invoking a signal handler for a thread, back the thread out of any internal waiting queues (mutex, CV, join, etc) to which it belongs.
Rework uthread_info.c a bit to make it easier to change the format of a thread dump.
Use an alternal signal stack for the thread library's signal handler. This allows us to fiddle with the main threads stack without fear of it being in use.
Reviewed by: jasone
|
68206 |
01-Nov-2000 |
jdp |
At the beginning of pthread_mutex_lock(), call _thread_init() if necessary. This works around a bug in old versions of libgcc_r.a which are statically linked into old executables.
|
67566 |
25-Oct-2000 |
deischen |
Make pthread_kill() know about temporary signal handlers installed by sigwait(). This prevents a signal from being sent to the process when there are no application installed signal handlers.
Correct a typo in sigwait (foo -> foo[i]).
|
67444 |
22-Oct-2000 |
deischen |
We use ___setjmp (non-signal saving) to setup a signal frame. When adding a signal frame to a thread, be sure to label the context correctly so we don't restore an uninitialized process mask.
Reported by: kimc@W8HD.ORG and Andrey Rouskol <anry@sovintel.ru>
|
67243 |
17-Oct-2000 |
peter |
Try and get libc_r to compile again on the alpha after deischen's commit
|
67171 |
15-Oct-2000 |
brian |
#include <sys/types.h>
|
67097 |
13-Oct-2000 |
deischen |
Implement zero system call thread switching. Performance of thread switches should be on par with that under scheduler activations.
o Timing is achieved through the use of a fixed interval timer (ITIMER_PROF) to count scheduling ticks instead of retrieving the time-of-day upon every thread switch and calculating elapsed real time.
o Polling for I/O readiness is performed once for each scheduling tick instead of every thread switch.
o The non-signal saving/restoring versions of setjmp/longjmp are used to save and restore thread contexts. This may allow the removal of _THREAD_SAFE macros from setjmp() and longjmp() - needs more investigation.
Change signal handling so that signals are handled in the context of the thread that is receiving the signal. When signals are dispatched to a thread, a special signal handling frame is created on top of the target threads stack. The frame contains the threads saved state information and a new context in which the thread can run. The applications signal handler is invoked through a wrapper routine that knows how to restore the threads saved state and unwind to previous frames.
Fix interruption of threads due to signals. Some states were being improperly interrupted while other states were not being interrupted. This should fix several PRs.
Signal handlers, which are invoked as a result of a process signal (not by pthread_kill()), are now called with the code (or siginfo_t if SA_SIGINFO was set in sa_flags) and sigcontext_t as received from the process signal handler.
Modify the search for a thread to which a signal is delivered. The search algorithm is now:
o First thread found in sigwait() with signal in wait mask. o First thread found sigsuspend()'d on the signal. o Current thread if signal is unmasked. o First thread found with signal unmasked.
Collapse machine dependent support into macros defined in pthread_private.h. These should probably eventually be moved into separate MD files.
Change the range of settable priorities to be compliant with POSIX (0-31). The threads library uses higher priorities internally for real-time threads (not yet implemented) and threads executing signal handlers. Real-time threads and threads running signal handlers add 64 and 32, respectively, to a threads base priority.
Some other small changes and cleanups.
PR: 17757 18559 21943 Reviewed by: jasone
|
66074 |
19-Sep-2000 |
sobomax |
Add thread-safe wrapper for fpathconf(2) syscall.
Reviewed by: jlemon
|
64991 |
23-Aug-2000 |
jasone |
The second call to _thread_kern_sig_defer() in sem_post() should be a call to _thread_kern_sig_undefer().
|
64574 |
13-Aug-2000 |
alfred |
Fix an off-by-one error in the recursive mutex handling that made it prematurely release recursive mutexes.
Test case provided by: Bradley T. Hughes <bhughes@trolltech.com> Reviewed by: deischen
|
64346 |
07-Aug-2000 |
jlemon |
Add wrapper for kevent() syscall
Noted as missing by: nicolas.leonard@animaths.com
|
64111 |
01-Aug-2000 |
jasone |
Make sem_post() safe to call from within a signal handler, as required by POSIX/SUSv2.
|
63710 |
21-Jul-2000 |
dfr |
Call _thread_init() from pthread_once() if it has not already been called. This fixes a segfault in some C++ programs which use exceptions before main() has been called (i.e. from global constructors).
Reviewed by: deischen
|
63364 |
18-Jul-2000 |
jasone |
Change my email address in the copyright notices for the sake of consistency (jasone@canonware.com --> jasone@freebsd.org).
|
63355 |
17-Jul-2000 |
jasone |
Deal correctly with statically initialized condition variables in pthread_cond_signal(), pthread_cond_broadcast(), and pthread_cond_timedwait().
Do not dump core in pthread_cond_timedwait() (due to a NULL pointer dereference) if attempting to wait on an uninitialized condition variable.
PR: bin/18099
|
62181 |
27-Jun-2000 |
jasone |
If multiple threads are blocked in sigwait() for the same signal that does not have a user-supplied signal handler, when a signal is delivered, one thread will receive the signal, and then the code reverts to having no signal handler for the signal. This can leave the other sigwait()ing threads stranded permanently if the signal is later ignored, or can result in process termination when the process should have delivered the signal to one of the threads in sigwait().
To fix this problem, maintain a count of sigwait()ers for each signal that has no default signal handler. Use the count to correctly install/uninstall dummy signal handlers.
Reviewed by: deischen
|
61681 |
14-Jun-2000 |
jasone |
pthread_mutex_lock(), pthread_cond_trywait(), and pthread_cond_wait() are not allowed to return EINTR, but use of pthread_suspend_np() could cause EINTR to be returned. To fix this, restructure pthread_suspend_np() so that it does not interrupt a thread that is waiting on a mutex or condition, and keep enough state around that pthread_resume_np() can fix things up afterwards.
Reviewed by: deischen
|
60938 |
26-May-2000 |
jake |
Back out the previous change to the queue(3) interface. It was not discussed and should probably not happen.
Requested by: msmith and others
|
60833 |
23-May-2000 |
jake |
Change the way that the queue(3) structures are declared; don't assume that the type argument to *_HEAD and *_ENTRY is a struct.
Suggested by: phk Reviewed by: phk Approved by: mdodd
|
60658 |
16-May-2000 |
jasone |
Fix a memory leak. pthread_set_name_np() allocates space for a name, but was not deallocating space for the previous name, if any.
PR: misc/18504
|
60382 |
11-May-2000 |
bde |
Fixed missing consts for function parameters, so that the code matches the man page and POSIX.1. Fixed nearby misformatting. Fixed a missing prototype.
|
59892 |
02-May-2000 |
jasone |
Add missing man pages. Fix various compliance bugs, mostly having to do with error return values. Implement pthread_mutexattr_gettype().
PR: docs/16537, docs/17538
|
59671 |
27-Apr-2000 |
jasone |
Add a wrapper for the sendfile() system call.
PR: bin/17366
|
58259 |
18-Mar-2000 |
jasone |
Explicitly include sys/cdefs.h to get the definition of __strong_reference(), rather than getting lucky due to header dependencies.
|
58094 |
15-Mar-2000 |
deischen |
Fix pthread_suspend_np/pthread_resume_np. For the record, suspending a thread waiting on an event (I/O, condvar, etc) will, when resumed using pthread_resume_np, return with EINTR. For example, suspending and resuming a thread blocked on read() will not requeue the thread for the read, but will return -1 with errno = EINTR. If the suspended thread is in a critical region, the thread is suspended as soon as it leaves the critical region.
Fix a bogon in pthread_kill() where a signal was being delivered twice to threads waiting in sigwait().
Reported by (suspend/resume bug): jdp Reviewed by: jasone
|
57261 |
16-Feb-2000 |
jasone |
For errors, return -1 and set errno to indicate the error type, rather than returning the error directly.
For sem_post(), make sure that the correct thread is woken up. This has unfortunate performance implications, but is necessary for POSIX compliance.
Approved by: jkh
|
56888 |
29-Jan-2000 |
jasone |
Use __strong_reference() instead of __weak_reference() to assure that the weak symbols of the same name are not used.
|
56771 |
28-Jan-2000 |
jasone |
Use _fcntl() (not fcntl()) inside of fcntl().
Reported by: green
|
56698 |
27-Jan-2000 |
jasone |
Simplify sytem call renaming. Instead of _foo() <-- _libc_foo <-- foo(), just use _foo() <-- foo(). In the case of a libpthread that doesn't do call conversion (such as linuxthreads and our upcoming libpthread), this is adequate. In the case of libc_r, we still need three names, which are now _thread_sys_foo() <-- _foo() <-- foo().
Convert all internal libc usage of: aio_suspend(), close(), fsync(), msync(), nanosleep(), open(), fcntl(), read(), and write() to _foo() instead of foo().
Remove all internal libc usage of: creat(), pause(), sleep(), system(), tcdrain(), wait(), and waitpid().
Make thread cancellation fully POSIX-compliant.
Suggested by: deischen
|
56388 |
22-Jan-2000 |
jasone |
Fix millisecond to nanosecond conversion.
PR: misc/16245
|
56344 |
20-Jan-2000 |
jasone |
Minor *jmp() cleanups.
|
56320 |
20-Jan-2000 |
jasone |
Add sem_*() functions. Named semaphores and process-shared semaphores are not supported by this implementation, and the error return values from sem_init(), sem_open(), sem_close(), and sem_unlink() reflect this.
Approved by: jkh
|
56310 |
20-Jan-2000 |
jasone |
Do signal deferral for pthread_kill() as it was done in the old days.
Submitted by: deischen
|
56277 |
19-Jan-2000 |
jasone |
Implement continuations to correctly handle [sig|_]longjmp() inside of a signal handler. Explicitly check for jumps to anywhere other than the current stack, since such jumps are undefined according to POSIX.
While we're at it, convert thread cancellation to use continuations, since it's cleaner than the original cancellation code.
Avoid delivering a signal to a thread twice. This was a pre-existing bug, but was likely unexposed until these other changes were made.
Defer signals generated by pthread_kill() so that they can be delivered on the appropriate stack. deischen claims that this is unnecessary, which is likely true, but without this change, pthread_kill() can cause undefined priority queue states and/or PANICs in [sig|_]longjmp(), so I'm leaving this in for now. To compile this code out and exercise the bug, define the _NO_UNDISPATCH cpp macro. Defining _PTHREADS_INVARIANTS as well will cause earlier crashes.
PR: kern/14685 Collaboration with: deischen
|
56236 |
18-Jan-2000 |
deischen |
Properly initialize the last active time of the initial thread. This fixes the case that a CPU hungry main thread is prevented from being preempted due to a negative calculation of its time slice.
Reported by: Alexander Litvin <archer@lucky.net>
|
55838 |
12-Jan-2000 |
jasone |
Track libc's three-tier symbol naming. libc_r must currently implement the _libc_*() entry points and add *() weak aliases. This will all change for the better when libc_r becomes libpthread.
|
55708 |
10-Jan-2000 |
deischen |
Make sched_param parameter a const to comply with POSIX and SUSv2 specs. This doesn't need to be applied to stable, because somehow -stable seems to have gotten it right.
Reviewed by: jasone
|
55222 |
29-Dec-1999 |
jasone |
Don't explicitly mmap() red zones at the bottom of thread stacks (except the initial thread). Instead, just leave an unmapped gap between thread stacks and make sure that the thread stacks won't grow into these gaps, simply by limiting the size of the stacks with the 'len' argument to mmap(). This (if I understand correctly) reduces VM overhead considerably.
Reviewed by: deischen
|
55194 |
28-Dec-1999 |
deischen |
-Wall and minor style(9) cleanups.
|
55193 |
28-Dec-1999 |
deischen |
Change stack allocation algorithm to make better use of memory (it was leaving an unused block). Also protect the global stack pointer from context changes while fiddling with it.
|
55192 |
28-Dec-1999 |
deischen |
Don't wakeup threads when there is a process signal and no installed handler. Thread-to-thread signals (pthread_signal) are treated differently than process signals; a pthread_signal can wakeup a blocked thread if a signal handler is not installed for that signal.
Found by: ACE tests
|
54757 |
18-Dec-1999 |
jasone |
Fix some minor POSIX/SUSv2 compliance nits.
PR: kern/11982
|
54708 |
17-Dec-1999 |
deischen |
Fix problems with cancellation while in critical regions.
o Cancellation flags were not getting properly set/cleared. o Loops waiting for internal locks were not being exited correctly by a cancelled thread. o Minor spelling (cancelation -> cancellation) and formatting corrections (missing tab).
Found by: tg Reviewed by: jasone
|
54707 |
17-Dec-1999 |
deischen |
Fixes for signal handling:
o Don't call signal handlers with the signal handler access lock held. o Remove pending signals before calling signal handlers. If pending signals were not removed prior to handling them, invocation of the handler could cause the handler to be called more than once for the same signal. Found by: JB o When SIGCHLD arrives, wake up all threads in PS_WAIT_WAIT (wait4).
PR: bin/15328 Reviewed by: jasone
|
54701 |
16-Dec-1999 |
jasone |
Avoid an infinite loop if the last element of the iov array passed to writev() has an iov_len of 0.
PR: bin/8281
|
54138 |
04-Dec-1999 |
deischen |
Change signal handling to conform to POSIX specified semantics. Before this change, a signal was delivered to each thread that didn't have the signal masked. Signals also improperly woke up threads waiting on I/O. With this change, signals are now handled in the following way:
o If a thread is waiting in a sigwait for the signal, then the thread is woken up.
o If no threads are sigwait'ing on the signal and a thread is in a sigsuspend waiting for the signal, then the thread is woken up.
o In the case that no threads are waiting or suspended on the signal, then the signal is delivered to the first thread we find that has the signal unmasked.
o If no threads are waiting or suspended on the signal, and no threads have the signal unmasked, then the signal is added to the process wide pending signal set. The signal will be delivered to the first thread that unmasks the signal.
If there is an installed signal handler, it is only invoked if the chosen thread was not in a sigwait.
In the case that multiple threads are waiting or suspended on a signal, or multiple threads have the signal unmasked, we wake up/deliver the signal to the first thread we find. The above rules still apply.
Reported by: Scott Hess <scott@avantgo.com> Reviewed by: jb, jasone
|
53847 |
28-Nov-1999 |
dfr |
* Fix the stack allocation code so that it works for alpha. Change it to use mmap(..., MAP_STACK, ...) on alpha too since that should work now. * Add hooks to allow GDB to access the internals of pthreads without having to know the exact layout of struct pthread.
Reviewed by: deischen
|
53812 |
28-Nov-1999 |
alfred |
add pthread_cancel, obtained from OpenBSD.
eischen (Daniel Eischen) added wrappers to protect against cancled threads orphaning internal resources.
the cancelability code is still a bit fuzzy but works for test programs of my own, OpenBSD's and some examples from ORA's books.
add readdir_r to both libc and libc_r
add some 'const' attributes to function parameters
Reviewed by: eischen, jasone
|
51816 |
30-Sep-1999 |
marcel |
Add the proper headers so that the SIGNOTEMPTY and SIGSETAND macros are defined.
|
51794 |
29-Sep-1999 |
marcel |
sigset_t change (part 5 of 5) -----------------------------
Most of the userland changes are in libc. For both the alpha and the i386 setjmp has been changed to accomodate for the new sigset_t. Internally, libc is mostly rewritten to use the new syscalls. The exception is in compat-43/sigcompat.c
The POSIX thread library has also been rewritten to use the new sigset_t. Except, that it currently only handles NSIG signals instead of the maximum _SIG_MAXSIG. This should not be a problem because current applications don't use any signals higher than NSIG.
There are version bumps for the following libraries: libdialog libreadline libc libc_r libedit libftpio libss
These libraries either a) have one of the modified structures visible in the interface, or b) use sigset_t internally and may cause breakage if new binaries are used against libraries that don't have the sigset_t change. This not an immediate issue, but will be as soon as applications start using the new range to its fullest.
NOTE: libncurses already had an version bump and has not been given one now.
NOTE: doscmd is a real casualty and has been disconnected for the moment. Reconnection will eventually happen after doscmd has been fixed. I'm aware that being the last one to touch it, I'm automaticly promoted to being maintainer. According to good taste this means that I will receive a badge which either will be glued or mechanically stapled, drilled or otherwise violently forced onto me :-)
NOTE: pcvt/vttest cannot be compiled with -traditional. The change cause sys/types to be included along the way which contains the const and volatile modifiers. I don't consider this a solution, but more a workaround.
|
50660 |
30-Aug-1999 |
dt |
Fix a memory leak: free the thread-specific poll_data, used in the select() implementation.
PR: 13368 Submitted by: Steve Bernacki, Jr. <steve@copacetic.net>
|
50601 |
30-Aug-1999 |
deischen |
When checking for valid timevals in the wrapped select() and poll() routines, don't return EINVAL but set errno to EINVAL and return -1. Added a check in pthread_cond_timedwait for a null timespec pointer.
|
50476 |
28-Aug-1999 |
peter |
$Id$ -> $FreeBSD$
|
50093 |
20-Aug-1999 |
alfred |
move sanity check of timeval struct so as not to segfault when passed a null pointer.
Pointed out by: Thomas Gellekum <tg@ihf.rwth-aachen.de> Reviewed by: eivind
|
50083 |
20-Aug-1999 |
jb |
When checking if there is a stack to free, observe the fact that it might have been mmapped, and if so, passing the pointer to free() is really not a good idea.
[ In the next millenium, when I've taken over the world, I'm going to ban 8 character tabs. You've been warned. ]
|
50066 |
19-Aug-1999 |
alfred |
time_to_sleep->tv_nsec > 1000000000 -to- time_to_sleep->tv_nsec >= 1000000000
|
50065 |
19-Aug-1999 |
alfred |
Sanity check time structures passed in, return EINVAL like the system calls do to avoid corrupting the thread library's concept of wakeup time.
PR: kern/12141 Reviewed by: deischen, eivind
|
50057 |
19-Aug-1999 |
alfred |
handle under/overflow of time values in a more robust manner, there may be an overflow that need to be adjusted more than once.
Pointed out by: Fabian Thylmann <fthylmann@stats.net>
Reviewed by: eivind, jb
|
49661 |
12-Aug-1999 |
deischen |
Add check for runnable threads before polling file descriptors.
Submitted by: tegge
|
49439 |
05-Aug-1999 |
deischen |
Add RCS IDs to those files without them. Fix copyrights (s/REGENTS/AUTHOR).
Suggested by: tg Approved by: jb
|
49438 |
05-Aug-1999 |
deischen |
Fix thread initialization to allow for the case where stdio file descriptors are not opened.
PR: bin/12853 Reviewed by: jb
|
48784 |
12-Jul-1999 |
dt |
Use USRSTACK (defined in <machine/vmparam.h>) to get top of the initial stack. PTHREAD_STACK_TOP was wrong for all supported architectures.
|
48749 |
11-Jul-1999 |
jasone |
Fix a couple more coding style nits.
|
48748 |
11-Jul-1999 |
jasone |
Modify previous changes to conform better to libc_r's coding style.
Always use mmap() for default-size stack allocation. Use MAP_ANON instead of MAP_STACK on the alpha architecture.
Reduce the amount of code executed while owning _gc_mutex during stack allocation.
|
48609 |
06-Jul-1999 |
jasone |
Always use growable thread stacks on the i386. The VM_STACK kernel option must be made default for the alpha before growable thread stacks are enabled for the alpha.
|
48569 |
05-Jul-1999 |
jasone |
Use growable stacks for thread stacks that are the default stack size.
Cache discarded default thread stacks for use in subsequent thread creations.
Create a red zone at the end of each stack (including the initial thread stack), with the hope of causing a segfault if a stack overflows.
To activate these modifications, add -D_PTHREAD_GSTACK to CFLAGS in src/lib/libc_r/Makefile. Since the modifications depend on the VM_STACK kernel option, I'm not sure how to safely use growable stacks by default.
Testing, as well as algorithmic and stylistic comments are welcome.
|
48349 |
29-Jun-1999 |
dt |
Defer signals, so we will not wait for SIGCHLD after it was delivered.
|
48140 |
23-Jun-1999 |
dt |
Fix few warnings on the alpha.
|
48046 |
20-Jun-1999 |
jb |
In the words of the author:
o The polling mechanism for I/O readiness was changed from select() to poll(). In additon, a wrapped version of poll() is now provided.
o The wrapped select routine now converts each fd_set to a poll array so that the thread scheduler doesn't have to perform a bitwise search for selected fds each time file descriptors are polled for I/O readiness.
o The thread scheduler was modified to use a new queue (_workq) for threads that need work. Threads waiting for I/O readiness and spinblocks are added to the work queue in addition to the waiting queue. This reduces the time spent forming/searching the array of file descriptors being polled.
o The waiting queue (_waitingq) is now maintained in order of thread wakeup time. This allows the thread scheduler to find the nearest wakeup time by looking at the first thread in the queue instead of searching the entire queue.
o Removed file descriptor locking for select/poll routines. An application should not rely on the threads library for providing this locking; if necessary, the application should use mutexes to protect selecting/polling of file descriptors.
o Retrieve and use the kernel clock rate/resolution at startup instead of hardcoding the clock resolution to 10 msec (tested with kernel running at 1000 HZ).
o All queues have been changed to use queue.h macros. These include the queues of all threads, dead threads, and threads waiting for file descriptor locks.
o Added reinitialization of the GC mutex and condition variable after a fork. Also prevented reallocation of the ready queue after a fork.
o Prevented the wrapped close routine from closing the thread kernel pipes.
o Initialized file descriptor table for stdio entries at thread init.
o Provided additional flags to indicate to what queues threads belong.
o Moved TAILQ initialization for statically allocated mutex and condition variables to after the spinlock.
o Added dispatching of signals to pthread_kill. Removing the dispatching of signals from thread activation broke sigsuspend when pthread_kill was used to send a signal to a thread.
o Temporarily set the state of a thread to PS_SUSPENDED when it is first created and placed in the list of threads so that it will not be accidentally scheduled before becoming a member of one of the scheduling queues.
o Change the signal handler to queue signals to the thread kernel pipe if the scheduling queues are protected. When scheduling queues are unprotected, signals are then dequeued and handled.
o Ensured that all installed signal handlers block the scheduling signal and that the scheduling signal handler blocks all other signals. This ensures that the signal handler is only interruptible for and by non-scheduling signals. An atomic lock is used to decide which instance of the signal handler will handle pending signals.
o Removed _lock_thread_list and _unlock_thread_list as they are no longer used to protect the thread list.
o Added missing RCS IDs to modified files.
o Added checks for appropriate queue membership and activity when adding, removing, and searching the scheduling queues. These checks add very little overhead and are enabled when compiled with _PTHREADS_INVARIANTS defined. Suggested and implemented by Tor Egge with some modification by me.
o Close a race condition in uthread_close. (Tor Egge)
o Protect the scheduling queues while modifying them in pthread_cond_signal and _thread_fd_unlock. (Tor Egge)
o Ensure that when a thread gets a mutex, the mutex is on that threads list of owned mutexes. (Tor Egge)
o Set the kernel-in-scheduler flag in _thread_kern_sched_state and _thread_kern_sched_state_unlock to prevent a scheduling signal from calling the scheduler again. (Tor Egge)
o Don't use TAILQ_FOREACH macro while searching the waiting queue for threads in a sigwait state, because a change of state destroys the TAILQ link. It is actually safe to do so, though, because once a sigwaiting thread is found, the loop ends and the function returns. (Tor Egge)
o When dispatching signals to threads, make the thread inherit the signal deferral flag of the currently running thread. (Tor Egge)
Submitted by: Daniel Eischen <eischen@vigrid.com> and Tor Egge <Tor.Egge@fast.no>
|
47452 |
24-May-1999 |
jb |
Added a missing comma to the static condition variable initialisation definition.
Submitted by: David Leonard <David.Leonard@csee.uq.edu.au>, an OpenBSD guy.
|
47424 |
23-May-1999 |
jb |
Fix a problem with static initialisation of mutexes and condition variables.
Submitted by: Dan Eischen <eischen@vigrid.com>
|
47244 |
16-May-1999 |
jb |
Ensure that an existing thread gets it's state set to PS_DEAD to prevent being rescheduled.
Submitted by: Dan Eischen <eischen@vigrid.com>
|
47206 |
14-May-1999 |
nate |
- Fixed bug where we NULL'd before we freed the data causing a memory leak.
Submitted by: Ralf S. Engelschall Obtained from: PR i386/11713
|
46680 |
08-May-1999 |
jasone |
Back out patch for cond_timedwait() bug from -current, since other changes have made the patch obsolete, as pointed out by Daniel Eischen <eischen@vigrid.com>.
PR: bin/8872
|
46628 |
07-May-1999 |
jasone |
Apply patch included in bin/8872. This fixes a bug that occurs when pthread_cond_timedwait() times out.
PR: bin/8872 Submitted by: Jason Evans <jasone@canonware.com> Reviewed by: David Schwartz <davids@webmaster.com>
|
44963 |
23-Mar-1999 |
jb |
[ The author's description... ]
o Runnable threads are now maintained in priority queues. The implementation requires two things:
1.) The priority queues must be protected during insertion and removal of threads. Since the kernel scheduler must modify the priority queues, a spinlock for protection cannot be used. The functions _thread_kern_sched_defer() and _thread_kern_sched_undefer() were added to {un}defer kernel scheduler activation.
2.) A thread (active) priority change can be performed only when the thread is removed from the priority queue. The implementation uses a threads active priority when inserting it into the queue.
A by-product is that thread switches are much faster. A separate queue is used for waiting and/or blocked threads, and it is searched at most 2 times in the kernel scheduler when there are active threads. It should be possible to reduce this to once by combining polling of threads waiting on I/O with the loop that looks for timed out threads and the minimum timeout value.
o Functions to defer kernel scheduler activation were added. These are _thread_kern_sched_defer() and _thread_kern_sched_undefer() and may be called recursively. These routines do not block the scheduling signal, but latch its occurrence. The signal handler will not call the kernel scheduler when the running thread has deferred scheduling, but it will be called when running thread undefers scheduling.
o Added support for _POSIX_THREAD_PRIORITY_SCHEDULING. All the POSIX routines required by this should now be implemented. One note, SCHED_OTHER, SCHED_FIFO, and SCHED_RR are required to be defined by including pthread.h. These defines are currently in sched.h. I modified pthread.h to include sched.h but don't know if this is the proper thing to do.
o Added support for priority protection and inheritence mutexes. This allows definition of _POSIX_THREAD_PRIO_PROTECT and _POSIX_THREAD_PRIO_INHERIT.
o Added additional error checks required by POSIX for mutexes and condition variables.
o Provided a wrapper for sigpending which is marked as a hidden syscall.
o Added a non-portable function as a debugging aid to allow an application to monitor thread context switches. An application can install a routine that gets called everytime a thread (explicitly created by the application) gets context switched. The routine gets passed the pthread IDs of the threads that are being switched in and out.
Submitted by: Dan Eischen <eischen@vigrid.com>
Changes by me:
o Added a PS_SPINBLOCK state to deal with the priority inversion problem most often (I think) seen by threads calling malloc/free/realloc.
o Dispatch signals to the running thread directly rather than at a context switch to avoid the situation where the switch never occurs.
|
42681 |
15-Jan-1999 |
jb |
Increase the size of private thread flags so that the test for a thread trying to call pthread_exit() from a cleanup handler actually works.
Submitted by: David Leonard <david.leonard@csee.uq.edu.au> OpenBSD
|
42500 |
11-Jan-1999 |
imp |
Fix a minor security problem in libc_r.
Submitted by: Alexandre Snarskii <snar@paranoia.ru> Approved by: John Birrell Reminded me that I'd been sitting on this too long: snar@paranoia.ru
|
41390 |
28-Nov-1998 |
eivind |
Add support for pthread_mutexattr_settype(). As a side effect of testing this, fix MUTEX_TYPE_COUNTING_FAST. Recursive locks now work.
|
41165 |
15-Nov-1998 |
jb |
Interrupt threads waiting in select etc.
Submitted by: Alec Wolman <wolman@cs.washington.edu>
|
41164 |
15-Nov-1998 |
jb |
Close a window between unlocking a spinlock and changing the thread state.
|
40974 |
06-Nov-1998 |
dt |
Don't call pthread_mutex_lock with _SPINLOCK held. Made pthread_cond_wait() more similar to pthread_cond_timedwait().
PR: 8375
|
40127 |
09-Oct-1998 |
dt |
Fix some bugs in pthread scheduler: make pthread_yield() more reliable, threads always (I hope) preempted at least every 0.1 sec, as intended.
PR: bin/7744 Submitted by: "Richard Seaman, Jr." <dick@tar.com>
|
39808 |
30-Sep-1998 |
jb |
Cosmetic cleansing. This code requires extra work to keep the garbage collector thread running after a fork.
|
39807 |
30-Sep-1998 |
jb |
Move the cleanup code that frees memory allocated for a dead thread from the thread kernel into a garbage collector thread which is started when the fisrt thread is created (other than the initial thread). This removes the window of opportunity where a context switch will cause a thread that has locked the malloc spinlock, to enter the thread kernel, find there is a dead thread and try to free memory, therefore trying to lock the malloc spinlock against itself.
The garbage collector thread acts just like any other thread, so instead of having a spinlock to control accesses to the dead thread list, it uses a mutex and a condition variable so that it can happily wait to be signalled when a thread exists.
|
39806 |
30-Sep-1998 |
jb |
Use snprintf instead of sprintf to avoid long source file paths from launching an application into space when someone tries to debug it.
The dead thread list now has it's own link pointer, so use that when reporting the grateful dead.
|
39805 |
30-Sep-1998 |
jb |
Implementation of an additional state called SIGWAIT (with the previous one renamed to SIGSUSPEND) to fix sigwait().
Submitted by: Daniel M. Eischen <eischen@vigrid.com>
|
39804 |
30-Sep-1998 |
jb |
NULL a pointer after it is freed to avoid trying to free it again.
|
39803 |
30-Sep-1998 |
jb |
- Fix the debug macros. - Add support of a thread being listed in the dead thread list as well as the thread list. - Add a new thread state to make sigwait work properly. (Submitted by Daniel M. Eischen <eischen@vigrid.com>) - Add global variable for the garbage collector mutex and condition variable. - Delete a couple of prototypes that are no longer required. - Add a prototype for the garbage collector thread.
|
39118 |
12-Sep-1998 |
dt |
In libc_r, rename vfork syscall to _thread_sys_vfork and make vfork an alias to fork. It is difficult to do real vfork in libc_r, since almost every operation with file descriptsor changes _thread_fd_table and friends.
popen(3) works much better with this change.
|
38925 |
07-Sep-1998 |
alex |
Removed unused variables.
|
38923 |
07-Sep-1998 |
alex |
Removed some variable initializations which were unnecessary and divergent from style(9).
|
38921 |
07-Sep-1998 |
alex |
-Wall clean.
|
38919 |
07-Sep-1998 |
alex |
Implement pthread read/write locks as defined by Version 2 of the Single UNIX Specification.
As with our standard mutexes, process shared locks are not supported at this time.
|
38564 |
26-Aug-1998 |
jb |
Don't automatically restart syscalls for the signals that the thread kernel needs.
|
38563 |
26-Aug-1998 |
jb |
Back out most of the last commit. It created problems with sigpause.
|
38539 |
25-Aug-1998 |
jb |
Fix for sigwait problem.
Submitted by: Daniel M. Eischen <eischen@vigrid.com> PR: misc/7039
|
38208 |
10-Aug-1998 |
jb |
Add extra initialisation code that is required for processes that are started instead of init (pid = 1). This allows an embedded implementation quite like VxWorks, with (possibly) a single threaded program running instead of init. The neat thing is that the same threaded process can run in a multi-user workstation environment too.
|
38027 |
02-Aug-1998 |
alex |
A style fix for my previous commit.
|
38025 |
02-Aug-1998 |
alex |
Fixed a race condition during the first lock/trylock of a statically initialized mutex. Statically initialized mutexes are actually initialized at first use (pthread_mutex_lock/pthread_mutex_trylock). To prevent concurrent initialization by multiple threads, all static initializations are now serialized by a spinlock.
Reviewed by: jb
|
37302 |
30-Jun-1998 |
bde |
Fixed a printf format error. Didn't fix assumption that sigset_t is integral.
|
37146 |
25-Jun-1998 |
jb |
Add the missing {} that caused the function to return ESRCH if it had to wait for the thread to exit and if the caller didn't want the thread exit status.
|
37045 |
17-Jun-1998 |
jb |
Don't allow a SIGCHLD to wake up a thread if the process has the default signal handler installed for SIGCHLD. The ACE MT_SOCK_Test was hanging as the result of being interrupted when it didn't expect to be.
|
37021 |
17-Jun-1998 |
jb |
If a thread is waiting on a child process to complete, the SIGCHLD signal can arrive before the thread is woken from it's wait4. In this case, don't return an EINTR, just set the thread state to running and the wait4 wrapper will loop and get the exit status of the process.
|
36965 |
14-Jun-1998 |
jb |
If a short write, only loop if no error.
|
36904 |
12-Jun-1998 |
jb |
Update the caller's descriptor masks even if there are none ready for I/O for those applications that don't believe the return value of zero as meaning that THERE ARE *NO* DESCRIPTORS READY.
|
36877 |
10-Jun-1998 |
jb |
Check the access mode in the flags before waiting on a read or a write that might never be possible if the file was not opened in the corrent mode. This prevents a hang for bad programs. Why do people code like that?
|
36876 |
10-Jun-1998 |
jb |
Remove SA_RESTART from the signal dispatch in user-space since this seems to be tripping up a lot of applications.
|
36875 |
10-Jun-1998 |
jb |
When doing a F_SETFL, read the flags back so that the ones stored in the file descriptor table are exactly what the kernel knows subject to the O_NONBLOCK flag being requested by the user.
|
36830 |
09-Jun-1998 |
jb |
Implement compile time debug support instead of tracking file name and line number every time a file descriptor is locked.
This looks like a big change but it isn't. It should reduce the size of libc_r and make it run slightly faster.
|
36828 |
09-Jun-1998 |
jb |
Add support for compile time debug. This is enabled if libc_r is built with -D_LOCK_DEBUG. This adds the file name and line number to each lock call and these are stored in the spinlock structure. When using debug mode, the lock function will check if the thread is trying to lock something it has already locked. This is not supposed to happen because the lock will be freed too early.
Without lock debug, libc_r should be smaller and slightly faster.
|
36827 |
09-Jun-1998 |
jb |
POSIX says that pthread_exit() is not allowed to be called from a cleanup destructor, so trap this case to prevent me from being being burnt again by applications that try to do this. With this change, an application (like one using a mis-configured ACE) will exit the process after displaying a message quoting the POSIX section that the application has violated.
|
36826 |
09-Jun-1998 |
jb |
Add compile time thread lock debug support.
Add a thread specific flag to trap the case where pthread_exit() is called from a destructor in violation of the Posix standard.
|
36698 |
06-Jun-1998 |
jb |
Add a warning message for a thread locking against itself. This is not supposed to happen, but I have seen bogus g++ code that causes it.
|
36697 |
06-Jun-1998 |
jb |
Simplify the handling of thread specific data. Only track if a key is allocated or not, rather than keeping a count and attempting to know it it is in-use. POSIX says that once a key is deleted, using the key again results in undefined behaviour.
|
36696 |
06-Jun-1998 |
jb |
Re-design the thread specific key structure.
|
36694 |
06-Jun-1998 |
jb |
I got the last commit back to front.
|
36680 |
05-Jun-1998 |
jb |
Fix the signal behaviour for internal states which set the thread state to running despite the SA_RESTART flag which is really just for syscalls.
|
36553 |
01-Jun-1998 |
jb |
I shouldn't do things early in the morning. I shouldn't do things early in the morning. [...] I shouldn't do things early in the morning.
|
36550 |
31-May-1998 |
jb |
Add some missing syscall wrappers.
|
36549 |
31-May-1998 |
jb |
Remove some stale code.
Pointed out by: Amancio
|
36548 |
31-May-1998 |
jb |
Don't restart a syscall when a SIGCHLD is received by a thread waiting on a child process.
|
36402 |
27-May-1998 |
jb |
Make a copy of the caller's iovec array, mallocing if necessary, and modify that if the writev() syscall does not completely write all bytes in a single call.
|
36382 |
25-May-1998 |
jb |
When doing a blocking write, keep looping until all the bytes are written without returning to the caller. This only occurs on pipes where either the number of bytes written is greater than the pipe buffer or if there is insufficient space in the pipe buffer because the reader is reading slower than the writer is writing.
|
35754 |
05-May-1998 |
jb |
Treat the lock value as volatile.
|
35614 |
02-May-1998 |
jb |
Cleanup in the child, not the parent.
Submitted by: Tor Egge <Tor.Egge@idi.ntnu.no>
|
35564 |
30-Apr-1998 |
jb |
Fix the incremental priority increment.
PR: bin/6467 Marino Ladavac <lada@pc8811.gud.siemens.at>
|
35509 |
29-Apr-1998 |
jb |
Change signal model to match POSIX (i.e. one set of signal handlers for the process, not a separate set for each thread). By default, the process now only has signal handlers installed for SIGVTALRM, SIGINFO and SIGCHLD. The thread kernel signal handler is installed for other signals on demand. This means that SIG_IGN and SIG_DFL processing is now left to the kernel, not the thread kernel.
Change the signal dispatch to no longer use a signal thread, and call the signal handler using the stack of the thread that has the signal pending.
Change the atomic lock method to use test-and-set asm code with a yield if blocked. This introduces separate locks for each type of object instead of blocking signals to prevent a context switch. It was this blocking of signals that caused the performance degradation the people have noted.
This is a *big* change!
|
35247 |
17-Apr-1998 |
jb |
Allow a thread dump to report the thread's sigmask when in the PS_SIGWAIT state.
|
35246 |
17-Apr-1998 |
jb |
When in PS_SIGWAIT state, still call signal handlers and set errno to EINTR.
|
35130 |
11-Apr-1998 |
jb |
Change the FILE locking to be by FILE, not by the underlying fd as it was. Add a FILE_WAIT state and queue threads waiting for a FILE lock. Start using the sys/queue.h macros instead of the way that MIT pthreads did it.
Add a thread name to the private thread structure and a non-POSIX function to set this. This helps (me at least) when sending a SIGINFO to a threaded process to get a /tmp/uthread.dump to see what the <expletive deleted> threads are doing this time. It is nice to be able to recognise (yes, I spell that with an 's' too) which threads are which.
|
35027 |
04-Apr-1998 |
jb |
Enable static initialisation of mutexes and condition variables.
|
35024 |
04-Apr-1998 |
jb |
Rename static initializer defines for opaque structures so that the POSIX specified names can be declared in pthread.h.
|
35022 |
04-Apr-1998 |
jb |
Move the magic field initialisation to a place when it is more magic.
|
35008 |
03-Apr-1998 |
jb |
Add a magic field to the pthread structure to help recognize valid threads from invalid ones. The pthread structure is opaque to the user so this change does not cause any incompatibilities.
Hopefully this change will help code that was written for draft 4 fail gracefully if the programmer ignores the compiler warning about the change in the level of indirection for the argument passed to pthread_detach(). I got burnt, so I fixed then (expletive deleted) thing.
These functions comply with the revised standard. That should shut Terry up!
|
34772 |
22-Mar-1998 |
jb |
Fix a problem of indirection unblocking signals that would have caused signals to be unblocked even if they were already blocked when entering the function.
Pointed out by: bde
|
34381 |
09-Mar-1998 |
jb |
When forking a process, only the running thread gets to live. All other threads never see the light of day and if they leave things locked, blame POSIX.
|
34362 |
09-Mar-1998 |
jb |
Add FreeBSD/Alpha code to initialise a jmpbuf for a created thread. Change a bunch of __alpha references to __alpha__.
|
34224 |
08-Mar-1998 |
jb |
Add sched_yield() witch is the draft 10 equivalent of pthread_yield() from draft 4. Move some of the schedule definitions to sched.h which is a POSIX header.
|
33292 |
13-Feb-1998 |
julian |
Fixes from Jeremy Allison and Terry Lambert for pthreads:
specifically: uthread_accept.c: Fix for inherited socket not getting correct entry in pthread flags. uthread_create.c: Fix to allow pthread_t pointer return to be null if caller doesn't care about return. uthread_fd.c: Fix for return codes to be placed into correct errno. uthread_init.c: Changes to make gcc-2.8 thread aware for exception stack frames (WARNING: This is #ifdef'ed out by default and is different from the Cygnus egcs fix). uthread_ioctl.c: Fix for blocking/non-blocking ioctl. uthread_kern.c: Signal handling fixes (only one case left to fix, that of an externally sent SIGSEGV and friends - a fairly unusual case). uthread_write.c: Fix for lock of fd - ask for write lock, not read/write. uthread_writev.c: Fix for lock of fd - ask for write lock, not read/write.
Pthreads now works well enough to run the LDAP and ACAPD(with the gcc 2.8 fix) sample implementations.
|
31985 |
25-Dec-1997 |
alex |
Changed pthread_detach to conform to POSIX, i.e. the single argument provided is of type pthread_t instead of pthread_t *.
PR: 4320
Return EINVAL instead of ESRCH if attempting to detach an already detached thread.
|
31402 |
25-Nov-1997 |
alex |
Modify the return values to comply with POSIX. Previously these functions would return -1 and set errno to indicate the specific error. POSIX requires that the functions return the error code as the return value of the function instead.
|
31400 |
24-Nov-1997 |
alex |
Added missing source file uthread_sigwait.c.
Submitted by: Daniel M. Eischen <deischen@iworks.InterWorks.org>
|
31375 |
23-Nov-1997 |
alex |
Correct the return value from pthread_cond_timedwait when a timeout occurs (was EAGAIN, is now ETIMEDOUT).
Submitted by: Daniel M. Eischen <deischen@iworks.InterWorks.org>
|
26445 |
04-Jun-1997 |
jb |
Bring back nanosleep from the cold.
The addition of the nanosleep syscall was correctly added to libc/sys/Makefile so that it is renamed as _thread_sys_nanosleep(). This syscall is one of those that libc_r has to re-implement because the only behaviour is to block the process. So libc_r just ignores the fact that a nanosleep syscall exists and goes its own way - as it has done all along .... and now it does again. And now a simple program can sleep again. Phew.
|
25795 |
13-May-1997 |
alex |
Fixed overallocation of _thread_fd_table.
PR: 3494 Submitted by: Steve Bauer <sbauer@rock.sdsmt.edu>
|
25738 |
12-May-1997 |
peter |
Add const in the thread version of nanosleep()'s args
|
25737 |
12-May-1997 |
peter |
remove prototype for nanosleep(), it's visible in unistd.h now.
|
25501 |
06-May-1997 |
jdp |
Bye bye CPLUSPLUSLIB hack! It's not needed any more.
Don't merge this into -2.2 unless you understand the dependencies on c++rt0, bsd.lib.mk, and gcc -shared. I.e., let me do it.
|
25402 |
03-May-1997 |
jb |
Use libc makefiles from now on instead of duplicating them in libc_r.
Added Id strings too. It's useful to know who last made a change.
|
24827 |
11-Apr-1997 |
jb |
Set wakeup time in pthread_cond_wait() to `forever' (-1) to prevent calling thread from being rescheduled based on an unspecified wakeup time.
Bug/fix pointed out by Alexandre Fenyo <fenyo@email.enst.fr>.
|
24520 |
01-Apr-1997 |
jb |
Fix indentations. Sigh.
|
24518 |
01-Apr-1997 |
jb |
Add parentheses to make blocking mode work.
|
22993 |
22-Feb-1997 |
peter |
Revert $FreeBSD$ to $Id$
|
22315 |
05-Feb-1997 |
julian |
Submitted by: John Birrell uthreads update from the author.
|
21673 |
14-Jan-1997 |
jkh |
Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long.
Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
|
21003 |
29-Dec-1996 |
alex |
Added uthread_attr_destroy.c to SRCS.
Submitted by: John Birrell <jb@cimlogic.com.au>
|
19633 |
11-Nov-1996 |
hsu |
Add pthread_mutexattr_init() and pthread_mutexattr_setkind_np().
|
19632 |
11-Nov-1996 |
hsu |
Add uthread_attr_init.c, uthread_attr_setstacksize.c, uthread_mattr_init.c, uthread_mattr_kind_np.c, uthread_multi_np.c, and uthread_single_np.c.
|
19631 |
11-Nov-1996 |
hsu |
Moved enum pthread_mutextype to pthread.h. Add pthread_mutexattr_default definition.
|
19630 |
11-Nov-1996 |
hsu |
Make pthread_getspecific() compliant with the final IEEE pthreads specification: return parameter passing changed.
|
18415 |
20-Sep-1996 |
nate |
Remove now un-necessary FreeBSD specific code since our timespec structure now has the correct member names.
Pointed out by: Peter Wemm
|
17706 |
20-Aug-1996 |
julian |
Submitted by: John Birrell <cimaxp1!jb@werple.net.au>
Here are the diffs for libc_r to get it one step closer to P1003.1c These make most of the thread/mutex/condvar structures opaque to the user. There are three functions which have been renamed with _np suffixes because they are extensions to P1003.1c (I did them for JAVA, which needs to suspend/resume threads and also start threads suspended).
I've created a new header (pthread_np.h) for the non-POSIX stuff.
The egrep tags stuff in /usr/src/lib/libc_r/Makefile that I uncommented doesn't work. I think its best to delete it. I don't think libc_r needs tags anyway, 'cause most of the source is in libc which does have tags.
also:
Here's the first batch of man pages for the thread functions. The diff to /usr/src/lib/libc_r/Makefile removes some stuff that was inherited from /usr/src/lib/libc/Makefile that should only be done with libc.
also:
I should have sent this diff with the pthread(3) man page. It allows people to type
make -DWANT_LIBC_R world
to get libc_r built with the rest of the world. I put this in the pthread(3) man page. The default is still not to build libc_r.
also: The diff attached adds a pthread(3) man page to /usr/src/share/man/man3. The idea is that without libc_r installed, this man page will give people enough info to know that they have to build libc_r.
|
14117 |
17-Feb-1996 |
jdp |
Added a new module "uthread_autoinit.cc". This is a small C++ module. It uses a static constructor to call _thread_init() at program start-up time. That eliminates the need for any initialization hooks in crt0.o.
Added a symbol reference in "uthread_init.c", to ensure that the new module will always be pulled in when the archive version of the library is used.
In "Makefile.inc", defined CPLUSPLUSLIB, so that the constructor will be properly invoked in the shared library.
Suggested by: Christopher Provenzano, Peter Wemm, and others.
|
13546 |
22-Jan-1996 |
julian |
Reviewed by: julian Submitted by: john birrel
One version of the pthreads library another will follow with differnt actions under some cases.. not QUITE complete
|