summaryrefslogtreecommitdiffstats
path: root/lib/libpthread
Commit message (Collapse)AuthorAgeFilesLines
* Fix MD macros to work for alpha. Without this fix, threads under alphadeischen2000-11-201-4/+4
| | | | | | | | seem to be totally broke. MFC Candidate Submitted by: gallatin
* Fix a bug where a statically initialized condition variabledeischen2000-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
* Delete 4 lines of misleading/incorrect comments.deischen2000-11-161-4/+0
|
* When entering the scheduler from the signal handler, telldeischen2000-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
* Use Fx macro wherever possible.ru2000-11-141-1/+2
|
* Bump the shared lib version. There seems to have been an incompatibleobrien2000-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.
* Correct the logic for checking the emptiness of the waiting queue.deischen2000-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.
* Don't needlessly poll file descriptors when there are nodeischen2000-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
* At the beginning of pthread_mutex_lock(), call _thread_init() ifjdp2000-11-011-0/+3
| | | | | necessary. This works around a bug in old versions of libgcc_r.a which are statically linked into old executables.
* Make pthread_kill() know about temporary signal handlers installeddeischen2000-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]).
* We use ___setjmp (non-signal saving) to setup a signal frame. Whendeischen2000-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>
* Try and get libc_r to compile again on the alpha after deischen's commitpeter2000-10-171-3/+3
|
* #include <sys/types.h>brian2000-10-151-0/+2
|
* Enable _PTHREADS_INVARIANTS until the recent libc_r changes aredeischen2000-10-131-1/+1
| | | | shaken out.
* Implement zero system call thread switching. Performance ofdeischen2000-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
* Add thread-safe wrapper for fpathconf(2) syscall.sobomax2000-09-192-0/+2
| | | | Reviewed by: jlemon
* The second call to _thread_kern_sig_defer() in sem_post() should be a calljasone2000-08-231-1/+1
| | | | to _thread_kern_sig_undefer().
* Fix an off-by-one error in the recursive mutex handling that made italfred2000-08-131-3/+3
| | | | | | | prematurely release recursive mutexes. Test case provided by: Bradley T. Hughes <bhughes@trolltech.com> Reviewed by: deischen
* Add wrapper for kevent() syscalljlemon2000-08-074-3/+5
| | | | Noted as missing by: nicolas.leonard@animaths.com
* Make sem_post() safe to call from within a signal handler, as required byjasone2000-08-012-0/+10
| | | | POSIX/SUSv2.
* Call _thread_init() from pthread_once() if it has not already been called.dfr2000-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
* pthread_once --> pthread_once_t.jasone2000-07-191-1/+1
|
* Change my email address in the copyright notices for the sake of consistencyjasone2000-07-1823-23/+23
| | | | (jasone@canonware.com --> jasone@freebsd.org).
* Deal correctly with statically initialized condition variables injasone2000-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
* Reshuffle the SEE ALSO section.jasone2000-07-173-7/+7
| | | | Prompted by: sheldonh
* Remove DEBUG_FLAGS=-g3, which never should have been committed.jasone2000-07-051-2/+0
|
* Fix typo in SEE ALSO section.jasone2000-06-281-1/+1
|
* If multiple threads are blocked in sigwait() for the same signal that doesjasone2000-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
* pthread_mutex_lock(), pthread_cond_trywait(), and pthread_cond_wait() arejasone2000-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
* Fix a misspelling: undefied -> undefinedchris2000-05-271-1/+1
|
* Back out the previous change to the queue(3) interface.jake2000-05-261-20/+20
| | | | | | It was not discussed and should probably not happen. Requested by: msmith and others
* Change the way that the queue(3) structures are declared; don't assume thatjake2000-05-231-20/+20
| | | | | | | | the type argument to *_HEAD and *_ENTRY is a struct. Suggested by: phk Reviewed by: phk Approved by: mdodd
* Fix a memory leak. pthread_set_name_np() allocates space for a name, butjasone2000-05-161-2/+6
| | | | | | was not deallocating space for the previous name, if any. PR: misc/18504
* Fix a memory leak. pthread_set_name_np() allocates space for a name, butjasone2000-05-161-0/+4
| | | | | | _thread_gc() was not deallocating it. PR: misc/18504
* add MLINKS: pthread_testcancel(3) -> pthread_setcanceltype(3)phantom2000-05-121-0/+1
|
* "Fixed" missing include in synopsis. POSIX.1-1996 only specifiesbde2000-05-112-0/+2
| | | | | including <signal.h>, but that must be a bug in POSIX.1, because it also specifies that the relevant prototype is [only] in <pthread.h>.
* Fixed misspelling of a struct tag in a function parameter type.bde2000-05-111-1/+1
|
* Fixed missing consts for function parameters, so that the code matchesbde2000-05-113-3/+6
| | | | | the man page and POSIX.1. Fixed nearby misformatting. Fixed a missing prototype.
* Fix miscellaneous mdoc macro argument limit infringements.sheldonh2000-05-091-1/+1
| | | | | PR: 18465 Reported by: Kazu TAKAMUNE <takamune@avrl.mei.co.jp>
* mdoc(7) cleanup:phantom2000-05-047-63/+79
| | | | | | | | | | | . use real function names as `.Nm' macro argument in NAME section. It allows them to appear in apropos(1) or whatis(1) output. . replace empty lines with `.Pp' macro. . replace hardcoded standard names with their `.St' macro equivalents. . sort cross references in SEE ALSO section
* Add missing .El macro.jasone2000-05-031-0/+1
|
* Add missing man pages. Fix various compliance bugs, mostly having to do withjasone2000-05-0213-25/+875
| | | | | | error return values. Implement pthread_mutexattr_gettype(). PR: docs/16537, docs/17538
* Add a wrapper for the sendfile() system call.jasone2000-04-272-1/+4
| | | | PR: bin/17366
* Add test to detect propagation of cancellation points within libc_r.jasone2000-04-262-1/+75
|
* Automated regression test harness for libc_r. Existing tests are integrated,jasone2000-04-2415-3/+3356
| | | | | a new test for POSIX semaphores was added, and examples of harness usage are included.
* Introduce .Lb macro to libc_r manpages.phantom2000-04-2241-0/+82
|
* Explicitly include sys/cdefs.h to get the definition of __strong_reference(),jasone2000-03-181-0/+1
| | | | rather than getting lucky due to header dependencies.
* Fix pthread_suspend_np/pthread_resume_np. For the record, suspending adeischen2000-03-159-31/+125
| | | | | | | | | | | | | | 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
* Remove single-space hard sentence breaks. These degrade the qualitysheldonh2000-03-0213-55/+110
| | | | | of the typeset output, tend to make diffs harder to read and provide bad examples for new-comers to mdoc.
* Fix the installworld breakage from rev 1.9.ru2000-02-181-5/+4
| | | | | | | Submitted by: reg Reviewed by: ru Approved by: jasone (rev 1.9) Pointy hat to: unfurl
OpenPOWER on IntegriCloud