summaryrefslogtreecommitdiff
path: root/lib/libpthread/thread
Commit message (Collapse)AuthorAgeFilesLines
* Add the ability to recognize old references to keys, and return NULLDaniel Eischen2002-03-196-36/+54
| | | | | | | | when old keys are referenced (after pthread_key_delete()) via pthread_getspecific(). Notes: svn path=/head/; revision=92730
* Fix the return code from pthread_rwlock_try[rw|rd]lock() functions;Brian S. Dean2002-03-151-2/+2
| | | | | | | | | these should return EBUSY when the calling thread would block. MFC after: 2 weeks Notes: svn path=/head/; revision=92360
* Properly clear the status of a join operation if the joining thread isDaniel Eischen2002-03-062-1/+4
| | | | | | | canceled or the joinee is detached. Notes: svn path=/head/; revision=91762
* Don't rely on <sys/signal.h> to include <sys/ucontext.h>Daniel Eischen2002-02-171-0/+1
| | | | Notes: svn path=/head/; revision=90774
* Correct a typo pthread_attr_setscope() function fails unconditionallyMaxim Konovalov2002-02-141-1/+1
| | | | | | | | | | | | due to. PR: misc/30699 Reviewed by: jasone, ru Approved by: jasone, ru MFC after: 1 week Notes: svn path=/head/; revision=90656
* This has been sitting in my local tree long enough. Remove the useDaniel Eischen2002-02-095-268/+167
| | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=90431
* Use the real function address (instead of function address + 8) for theDaniel Eischen2001-12-221-2/+2
| | | | | | | | | | | | 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> Notes: svn path=/head/; revision=88401
* Fix the retrieval of USRSTACK via sysctl so that it works for 64-bitDaniel Eischen2001-12-181-2/+2
| | | | | | | | | archs. This should fix libc_r on alpha. Submitted by: Bernd Walter <ticso@cicely9.cicely.de> Notes: svn path=/head/; revision=88092
* When cancelling a thread while in a join operation, do not detachDaniel Eischen2001-12-161-4/+1
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=88015
* Pull the target thread of a join operation from the correct placeDaniel Eischen2001-12-151-3/+4
| | | | | | | when cancelling a thread. Notes: svn path=/head/; revision=87988
* Fix pthread_join so that it works if the target thread exits whileDaniel Eischen2001-11-174-10/+32
| | | | | | | | | | the joining thread is in a signal handler. Reported by: Loren James Rittle <rittle@labs.mot.com> MFC after: 1 week Notes: svn path=/head/; revision=86499
* Make libc_r check the kern.usrstack sysctl instead of using internalPeter Wemm2001-10-263-6/+20
| | | | | | | | | | 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. Notes: svn path=/head/; revision=85567
* Style: sort __sys_foo() prototypes, tabs -> spaces, etc.Ruslan Ermilov2001-10-261-78/+78
| | | | Notes: svn path=/head/; revision=85559
* Removed:Ruslan Ermilov2001-10-262-16/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | - 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 Notes: svn path=/head/; revision=85557
* Compensate for "Compensate for header dethreading" by backing it out.Bruce Evans2001-10-101-2/+0
| | | | Notes: svn path=/head/; revision=84768
* Limit maximum poll interval to 60 seconds. This prevents an overflowDaniel Eischen2001-10-071-0/+3
| | | | | | | | | | from occurring when converting from a timeval/timespec to a timeout in milliseconds. Submitted by: dwmalone Notes: svn path=/head/; revision=84610
* Fix logic errors in pthread_cond_wait() and pthread_cond_timedwait() thatJason Evans2001-08-191-68/+52
| | | | | | | | | could cause deadlock after interruption due to a signal. Reviewed by: deischen Notes: svn path=/head/; revision=81918
* Fix a bug in canceling joining threads.Jason Evans2001-08-163-2/+18
| | | | | | | | | | Do not detach canceled threads. Reported by: Arno Klaassen <arno@heho.snv.jussieu.fr> Collaboration with: deischen Notes: svn path=/head/; revision=81750
* Make the name parameter const char *.Warner Losh2001-08-111-1/+1
| | | | Notes: svn path=/head/; revision=81524
* Implement pthread_attr_[gs]etguardsize(). Non-default-size stacks used toJason Evans2001-07-209-174/+387
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=80021
* Clear the in thread scheduler flag after jumping to the start ofDaniel Eischen2001-06-291-0/+6
| | | | | | | | | a signal handler from the scheduler. MFC after: 1 week Notes: svn path=/head/; revision=78979
* Fix a race condition in pthread_join(). All of the following must occurJason Evans2001-06-273-48/+53
| | | | | | | | | | | | | | | 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. Notes: svn path=/head/; revision=78873
* Instead of using a join queue for each thread, use a single pointer toJason Evans2001-05-2011-146/+107
| | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=76909
* Condition variable waiters are queued in descending priority order, soJason Evans2001-05-181-9/+2
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=76781
* Mark a thread that is suspended while sleeping as interrupted.Jason Evans2001-05-161-1/+3
| | | | Notes: svn path=/head/; revision=76699
* Properly copy the P_ALTSTACK flag in struct proc::p_flag to the childAkinori MUSHA2001-05-071-11/+1
| | | | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=76336
* Move the check for a pending signals to after the thread has beenDaniel Eischen2001-05-042-6/+18
| | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=76280
* Compenate for header dethreading.Mark Murray2001-05-011-0/+2
| | | | Notes: svn path=/head/; revision=76179
* Typo; fix open() so that it is not a cancellation point when calledDaniel Eischen2001-04-181-1/+1
| | | | | | | from libc. Notes: svn path=/head/; revision=75658
* Reinstall the alternate signal stack after a fork.Daniel Eischen2001-04-181-1/+11
| | | | | | | | PR: 25110 Tested by: knu Notes: svn path=/head/; revision=75657
* Clean up a bit. Use the correct TAILQ link when walking the threadDaniel Eischen2001-04-101-38/+71
| | | | | | | | lists to free thread resources after a fork (in the child). Also remember to free the dead thread list. Notes: svn path=/head/; revision=75371
* Added a missing set of braces to a conditional that encompasses more thanDaniel Eischen2001-04-101-5/+6
| | | | | | | one statement. Notes: svn path=/head/; revision=75370
* To be consistent, use the __weak_reference macro from <sys/cdefs.h>Daniel Eischen2001-04-1081-123/+123
| | | | | | | | | instead of #pragma weak to create weak definitions. Suggested by: bde Notes: svn path=/head/; revision=75369
* Activate build of posix1e extensions in libc and libc_r that have beenThomas Moestl2001-04-041-0/+6
| | | | | | | | | | | moved in from libposix1e, and deactivate build of the soon-to-be-removed libposix1e. Approved by: rwatson Obtained from: TrustedBSD Project Notes: svn path=/head/; revision=75188
* Add thread safety wrappers for the posix1e syscalls that deal with fileThomas Moestl2001-04-042-0/+61
| | | | | | | | | | descriptors. Approved by: rwatson Obtained from: TrustedBSD Project Notes: svn path=/head/; revision=75187
* Add a leading underscore to the pthread_main_np function name, andIan Dowse2001-04-031-1/+2
| | | | | | | | | | | | 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 Notes: svn path=/head/; revision=75145
* Bring in a hybrid of SunSoft's transport-independent RPC (TI-RPC) andAlfred Perlstein2001-03-192-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=74462
* Correct a race condition where it was possible for a signaledDaniel Eischen2001-03-091-2/+8
| | | | | | | | | | | thread to become stranded and not placed in the run queue. MFC Candidate Reported by: tegge Notes: svn path=/head/; revision=74038
* Really set the flags for a private mutex (used by libc/libc_r).Daniel Eischen2001-02-261-2/+5
| | | | Notes: svn path=/head/; revision=73057
* Limit threads clock resolution to no less than 1000usec (1000Hz).Daniel Eischen2001-02-262-1/+3
| | | | | | | | PR: 25300 Submitted by: Tom Pavel <pavel@alum.mit.edu> (in part) Notes: svn path=/head/; revision=73056
* Remove (int) file descriptor locking. It should be up to theDaniel Eischen2001-02-113-17/+4
| | | | | | | | | | | | | | | | 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). Notes: svn path=/head/; revision=72374
* s/_thread_sys_write/__sys_write/Daniel Eischen2001-01-311-2/+2
| | | | | | | Submitted by: Mike Heffner <mheffner@vt.edu> Notes: svn path=/head/; revision=71856
* Unbreak world by correctly specifying the prototype for __sys_aio_suspend.Daniel Eischen2001-01-291-1/+1
| | | | | | | | | A make buildworld was done but not with the committed pthread_private.h. Reported by: Manfred Antar <null@pozo.com> Notes: svn path=/head/; revision=71808
* _exit in libc is now __sys_exit not __sys__exit.Daniel Eischen2001-01-292-7/+6
| | | | | | | | | 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). Notes: svn path=/head/; revision=71771
* Add weak definitions for wrapped system calls. In general:Daniel Eischen2001-01-2489-1049/+1218
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | _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 Notes: svn path=/head/; revision=71581
* Force strong references to several pthread_* functions which are weaklyDavid E. O'Brien2001-01-061-0/+32
| | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=70702
* When retrieving the time of day in nanosleep(), store it in theDaniel Eischen2000-12-201-4/+12
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=70233
* Enable check for pending signals after calling a signal handler.Daniel Eischen2000-12-201-0/+3
| | | | | | | | | | Restoration of a threads signal mask after invocation of a signal handler may allow pending signals to become deliverable. PR: 23647 Notes: svn path=/head/; revision=70231
* Change a "while {}" loop to a "do {} while" to allow it to beDaniel Eischen2000-11-202-3/+7
| | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=68941
* Fix MD macros to work for alpha. Without this fix, threads under alphaDaniel Eischen2000-11-201-4/+4
| | | | | | | | | | | seem to be totally broke. MFC Candidate Submitted by: gallatin Notes: svn path=/head/; revision=68926