summaryrefslogtreecommitdiff
path: root/lib/libpthread
Commit message (Collapse)AuthorAgeFilesLines
* 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
* mdoc(7) police: fix markup.Ruslan Ermilov2001-03-022-7/+9
| | | | Notes: svn path=/head/; revision=73339
* Use ``.St -p1003.1-96''.Ruslan Ermilov2001-02-2632-96/+64
| | | | Notes: svn path=/head/; revision=73093
* /^\.St/ s/-iso9945-1/-p1003.1-96/Ruslan Ermilov2001-02-266-6/+6
| | | | Notes: svn path=/head/; revision=73092
* 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
* Fix typo.Nik Clayton2001-02-021-1/+1
| | | | | | | | PR: docs/23936 Submitted by: Garret Rooney <rooneg@rpi.edu> Notes: svn path=/head/; revision=71919
* mdoc(7) police: split punctuation characters + misc fixes.Ruslan Ermilov2001-02-012-2/+3
| | | | Notes: svn path=/head/; revision=71895
* 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
* -pthread -> -lc_rDaniel Eischen2001-01-241-1/+1
| | | | Notes: svn path=/head/; revision=71586
* Add weak definitions for wrapped system calls. In general:Daniel Eischen2001-01-2490-1066/+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
* Prepare for mdoc(7)NG.Ruslan Ermilov2000-12-291-0/+1
| | | | Notes: svn path=/head/; revision=70481
* 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
* mdoc(7) police: Er macro usage cleanup.Ruslan Ermilov2000-11-222-2/+6
| | | | Notes: svn path=/head/; revision=69051
* 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
* Fix a bug where a statically initialized condition variableDaniel Eischen2000-11-161-2/+2
| | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=68844
* Delete 4 lines of misleading/incorrect comments.Daniel Eischen2000-11-161-4/+0
| | | | Notes: svn path=/head/; revision=68835
* When entering the scheduler from the signal handler, tellDaniel Eischen2000-11-144-19/+38
| | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=68726
* Use Fx macro wherever possible.Ruslan Ermilov2000-11-141-1/+2
| | | | Notes: svn path=/head/; revision=68716
* Bump the shared lib version. There seems to have been an incompatibleDavid E. O'Brien2000-11-141-1/+1
| | | | | | | | change committed to RELENG_4 where a bump there is now necessary. We've got to go before RELENG_4 does. Notes: svn path=/head/; revision=68699
* Correct the logic for checking the emptiness of the waiting queue.Daniel Eischen2000-11-111-1/+1
| | | | | | | | | | This fixes a potential problem where the file descriptors would not be polled causing waiting threads to stay waiting. Doh! MFC candidate. Notes: svn path=/head/; revision=68615
* Don't needlessly poll file descriptors when there are noDaniel Eischen2000-11-0913-660/+594
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=68516
* At the beginning of pthread_mutex_lock(), call _thread_init() ifJohn Polstra2000-11-011-0/+3
| | | | | | | | necessary. This works around a bug in old versions of libgcc_r.a which are statically linked into old executables. Notes: svn path=/head/; revision=68206
* Make pthread_kill() know about temporary signal handlers installedDaniel Eischen2000-10-252-32/+124
| | | | | | | | | | 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]). Notes: svn path=/head/; revision=67566
* We use ___setjmp (non-signal saving) to setup a signal frame. WhenDaniel Eischen2000-10-221-1/+1
| | | | | | | | | | 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> Notes: svn path=/head/; revision=67444
* Try and get libc_r to compile again on the alpha after deischen's commitPeter Wemm2000-10-171-3/+3
| | | | Notes: svn path=/head/; revision=67243
* #include <sys/types.h>Brian Somers2000-10-151-0/+2
| | | | Notes: svn path=/head/; revision=67171
* Enable _PTHREADS_INVARIANTS until the recent libc_r changes areDaniel Eischen2000-10-131-1/+1
| | | | | | | shaken out. Notes: svn path=/head/; revision=67099
* Implement zero system call thread switching. Performance ofDaniel Eischen2000-10-1324-1100/+1688
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=67097
* Add thread-safe wrapper for fpathconf(2) syscall.Maxim Sobolev2000-09-192-0/+2
| | | | | | | Reviewed by: jlemon Notes: svn path=/head/; revision=66074
* The second call to _thread_kern_sig_defer() in sem_post() should be a callJason Evans2000-08-231-1/+1
| | | | | | | to _thread_kern_sig_undefer(). Notes: svn path=/head/; revision=64991
* Fix an off-by-one error in the recursive mutex handling that made itAlfred Perlstein2000-08-131-3/+3
| | | | | | | | | | prematurely release recursive mutexes. Test case provided by: Bradley T. Hughes <bhughes@trolltech.com> Reviewed by: deischen Notes: svn path=/head/; revision=64574
* Add wrapper for kevent() syscallJonathan Lemon2000-08-074-3/+5
| | | | | | | Noted as missing by: nicolas.leonard@animaths.com Notes: svn path=/head/; revision=64346
* Make sem_post() safe to call from within a signal handler, as required byJason Evans2000-08-012-0/+10
| | | | | | | POSIX/SUSv2. Notes: svn path=/head/; revision=64111
* Call _thread_init() from pthread_once() if it has not already been called.Doug Rabson2000-07-211-0/+2
| | | | | | | | | | This fixes a segfault in some C++ programs which use exceptions before main() has been called (i.e. from global constructors). Reviewed by: deischen Notes: svn path=/head/; revision=63710
* pthread_once --> pthread_once_t.Jason Evans2000-07-191-1/+1
| | | | Notes: svn path=/head/; revision=63541
* Change my email address in the copyright notices for the sake of consistencyJason Evans2000-07-1823-23/+23
| | | | | | | (jasone@canonware.com --> jasone@freebsd.org). Notes: svn path=/head/; revision=63364
* Deal correctly with statically initialized condition variables inJason Evans2000-07-171-18/+17
| | | | | | | | | | | | 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 Notes: svn path=/head/; revision=63355
* Reshuffle the SEE ALSO section.Jason Evans2000-07-173-7/+7
| | | | | | | Prompted by: sheldonh Notes: svn path=/head/; revision=63352
* Remove DEBUG_FLAGS=-g3, which never should have been committed.Jason Evans2000-07-051-2/+0
| | | | Notes: svn path=/head/; revision=62641
* Fix typo in SEE ALSO section.Jason Evans2000-06-281-1/+1
| | | | Notes: svn path=/head/; revision=62197
* If multiple threads are blocked in sigwait() for the same signal that doesJason Evans2000-06-273-4/+37
| | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=62181
* pthread_mutex_lock(), pthread_cond_trywait(), and pthread_cond_wait() areJason Evans2000-06-146-36/+125
| | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=61681
* Fix a misspelling: undefied -> undefinedChris Costello2000-05-271-1/+1
| | | | Notes: svn path=/head/; revision=60985