summaryrefslogtreecommitdiff
path: root/lib/libpthread/thread
Commit message (Collapse)AuthorAgeFilesLines
* sysctlbyname needs size_t type, not int.David Xu2003-07-311-1/+1
| | | | Notes: svn path=/head/; revision=118254
* Don't forget to unlock the scheduler lock. Somehow this got removedDaniel Eischen2003-07-301-0/+1
| | | | | | | | | | from one of my last commits. This only affected priority ceiling mutexes. Pointy hat to: deischen Notes: svn path=/head/; revision=118206
* Simplify sigwait code a bit by using a waitset and removing oldsigmask.David Xu2003-07-273-22/+17
| | | | | | | Reviewed by: deischen Notes: svn path=/head/; revision=118075
* Move idle kse wakeup to outside of regions where locks are held.Daniel Eischen2003-07-238-73/+130
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=117907
* Override libc function raise(), in threading mode, raise() willDavid Xu2003-07-192-0/+54
| | | | | | | | | send signal to current thread. Reviewed by: deischen Notes: svn path=/head/; revision=117758
* Cleanup thread accounting. Don't reset a threads timesliceDaniel Eischen2003-07-183-38/+27
| | | | | | | | | | | when it blocks; it only gets reset when it yields. Properly set a thread's default stack guardsize. Reviewed by: davidxu Notes: svn path=/head/; revision=117715
* Add a preemption point when a mutex or condition variable isDaniel Eischen2003-07-182-6/+18
| | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=117714
* o Eliminate upcall for PTHREAD_SYSTEM_SCOPE thread, now itDavid Xu2003-07-1714-395/+596
| | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=117706
* Don't resume sigwait thread If signal is masked.David Xu2003-07-091-8/+12
| | | | Notes: svn path=/head/; revision=117366
* POSIX says if a thread is in sigwait state, although a signal may not inDavid Xu2003-07-092-11/+29
| | | | | | | | | | | 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. Notes: svn path=/head/; revision=117353
* Restore signal mask correctly after fork().David Xu2003-07-092-4/+6
| | | | Notes: svn path=/head/; revision=117345
* Save and restore thread's error code around signal handling.David Xu2003-07-091-1/+2
| | | | | | | Reviewed by: deischen Notes: svn path=/head/; revision=117344
* Correctly print signal mask, the bug was introduced by cut and pasteDavid Xu2003-07-071-11/+20
| | | | | | | in last commit. Notes: svn path=/head/; revision=117305
* Add a newline to debug message.David Xu2003-07-071-1/+1
| | | | Notes: svn path=/head/; revision=117301
* Avoid accessing user provided parameters in critical region.David Xu2003-07-079-46/+65
| | | | | | | Reviewed by: deischen Notes: svn path=/head/; revision=117300
* Print thread's scope, also print signal mask for every thread and printDavid Xu2003-07-071-17/+13
| | | | | | | it in one line. Notes: svn path=/head/; revision=117297
* Correctly lock/unlock signal lock. I must be in bad state, need to sleep.David Xu2003-07-041-1/+2
| | | | Notes: svn path=/head/; revision=117217
* Always check and restore sigaction previously set, also access user parameterDavid Xu2003-07-041-4/+7
| | | | | | | outside of lock. Notes: svn path=/head/; revision=117216
* If select() is only used for sleep, convert it to nanosleep,David Xu2003-07-031-4/+9
| | | | | | | it only need purely wait in user space. Notes: svn path=/head/; revision=117197
* Check if thread is in critical region, only testing check_pendingDavid Xu2003-07-031-1/+2
| | | | | | | is not enough. Notes: svn path=/head/; revision=117193
* Set unlock_mutex to 1 after locked mutex.David Xu2003-07-021-2/+4
| | | | | | | | Use THR_CONDQ_CLEAR not THR_COND_SET in cond_queue_deq, current cond_queue_deq is not used. Notes: svn path=/head/; revision=117165
* Fix typo.David Xu2003-07-021-1/+1
| | | | Notes: svn path=/head/; revision=117162
* Because there are only _SIG_MAXSIG elements in thread siginfo array,David Xu2003-06-303-16/+16
| | | | | | | use [signal number - 1] as subscript to access the array. Notes: svn path=/head/; revision=117066
* Remove surplus unlocking code I accidentally checked in. This won't beDavid Xu2003-06-301-4/+0
| | | | | | | triggered until LDT entry is exhausted. Notes: svn path=/head/; revision=117063
* o Use a daemon thread to monitor signal events in kernel, if pendingDavid Xu2003-06-2812-586/+806
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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(). Notes: svn path=/head/; revision=116977
* Use mmap retuned value.David Xu2003-06-281-2/+3
| | | | | | | Reviewed by: deischen Notes: svn path=/head/; revision=116976
* Temporary disable rwlock based code, replace it with low level KSE lockingDavid Xu2003-06-281-0/+92
| | | | | | | | | | code until rtld-elf and libkse can cooperate better, those code can be restored. Reviewed by: deischen Notes: svn path=/head/; revision=116975
* Write new thread pointer back only when success.David Xu2003-06-281-3/+4
| | | | | | | Reviewed by: deischen Notes: svn path=/head/; revision=116974
* After thread was interrupted by signal, it should relock mutex.David Xu2003-06-281-2/+1
| | | | | | | Reviewed by: deischen Notes: svn path=/head/; revision=116973
* if thread is exiting, just returns. kse_thr_interrupt interfaceDavid Xu2003-06-281-2/+6
| | | | | | | | | | was changed, it needs signal parameter, pass -1 to it, it indicates to interrupt syscall. Reviewed by: deischen Notes: svn path=/head/; revision=116972
* Explicitly widen int types before casting to pointer types. On 64-bitMarcel Moolenaar2003-06-241-3/+4
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=116773
* Untangle the inter-dependency of kse types and ksd types/functionsMarcel Moolenaar2003-06-232-2/+1
| | | | | | | | | | | | | | | | | | | | | | 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. Notes: svn path=/head/; revision=116771
* Change the definition of _ksd_curkse, _ksd_curthread andMarcel Moolenaar2003-06-231-3/+3
| | | | | | | | | | | | _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. Notes: svn path=/head/; revision=116719
* Don't lock scheduler lock twice.David Xu2003-06-181-2/+1
| | | | Notes: svn path=/head/; revision=116514
* After selecting a thread to handle a signal and takingDaniel Eischen2003-06-081-3/+8
| | | | | | | | | | | its scheduling lock, make sure that the thread still has the signal unmasked. Make a debug statement conditional on debugging being enabled. Notes: svn path=/head/; revision=116061
* Insert threads at the end of the free thread list so thatDaniel Eischen2003-06-081-1/+1
| | | | | | | | | | 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. Notes: svn path=/head/; revision=116060
* Only init _thread_sigact once, needn't init it again after a fork().David Xu2003-06-041-31/+31
| | | | | | | Obtained from: deischen Notes: svn path=/head/; revision=115828
* Despite whether threaded mode is turned on, always save thread'sDavid Xu2003-06-041-4/+6
| | | | | | | signal mask. Notes: svn path=/head/; revision=115827
* KMF_DONE is now in /sys/sys/kse.h, no longer need to define it here.David Xu2003-06-042-7/+0
| | | | Notes: svn path=/head/; revision=115798
* Free memory of internal low level lock when mutex and condition variableDavid Xu2003-06-032-0/+9
| | | | | | | | | are destroyed. Submitted by: tegge Notes: svn path=/head/; revision=115761
* Save THR_FLAGS_IN_TDLIST in signal frame, otherwise if a thread receivedDavid Xu2003-05-301-1/+2
| | | | | | | | | | a signal will can not be removed from thread list after it exited. Reviewed by: deischen Approved by: re (jhb) Notes: svn path=/head/; revision=115413
* Attempt to eliminate PLT relocations from rwlock aquire/releaseAlexander Kabaev2003-05-308-21/+192
| | | | | | | | | | | | | | 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) Notes: svn path=/head/; revision=115399
* Call the __sys_sigprocmask(the system call) when sigprocmask()Daniel Eischen2003-05-301-1/+4
| | | | | | | | | | | | 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) Notes: svn path=/head/; revision=115398
* Don't really spin on a spinlock; silently convert it to the sameDaniel Eischen2003-05-294-16/+71
| | | | | | | | | | | | | | | 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) Notes: svn path=/head/; revision=115381
* Change low-level locking a bit so that we can tell ifDaniel Eischen2003-05-2410-134/+263
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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) Notes: svn path=/head/; revision=115278
* Eek, staticize a couple of functions that shouldn'tDaniel Eischen2003-05-193-23/+21
| | | | | | | | | | | | | | | 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) Notes: svn path=/head/; revision=115173
* Add a method of yielding the current thread with the schedulerDaniel Eischen2003-05-1612-285/+311
| | | | | | | | | | | | | | | | | | | | | | | | | | 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) Notes: svn path=/head/; revision=115080
* Make pthread_join() async-cancel-safe. David was going to commitDaniel Eischen2003-05-061-9/+0
| | | | | | | | | | this, but I think he's asleep and want to be sure it gets in before the freeze. Submitted by: davidxu Notes: svn path=/head/; revision=114767
* call dump_queues() only when DEBUG_THREAD_KERN is defined, save someDavid Xu2003-05-051-0/+2
| | | | | | | cpu cycles. Notes: svn path=/head/; revision=114688
* Fix suspend and resume.Daniel Eischen2003-05-046-43/+47
| | | | | | | Submitted (in part) by: Kazuaki Oda <kaakun@highway.ne.jp> Notes: svn path=/head/; revision=114664