summaryrefslogtreecommitdiff
path: root/lib/libpthread/thread
Commit message (Collapse)AuthorAgeFilesLines
* Move the mailbox to the beginning of the thread and align theDaniel Eischen2003-04-304-7/+21
| | | | | | | thread so that the context (SSE FPU state) is also aligned. Notes: svn path=/head/; revision=114295
* Call kse_wakeup_mutli() after remove current thread from RUNQ to avoidDavid Xu2003-04-301-1/+1
| | | | | | | doing unnecessary idle kse wakeup. Notes: svn path=/head/; revision=114267
* Call kse_wakeup_multi() to wakeup idle KSEs when there are threads readyDavid Xu2003-04-301-0/+1
| | | | | | | to run. Notes: svn path=/head/; revision=114266
* Create the thread signal lock as a KSE lock (as opposed toDaniel Eischen2003-04-293-22/+23
| | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=114254
* o Don't add a scope system thread's KSE to the list of availableDaniel Eischen2003-04-2817-157/+318
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. Notes: svn path=/head/; revision=114187
* Use the correct link entry for walking the list of threads.Daniel Eischen2003-04-281-9/+2
| | | | | | | | | | | 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> Notes: svn path=/head/; revision=114180
* Protect thread errno from being changed while operatingDaniel Eischen2003-04-232-0/+33
| | | | | | | | | | | on behalf of the KSE. Add a kse_reinit function to reinitialize a reused KSE. Submitted by: davidxu Notes: svn path=/head/; revision=113942
* Set the quantum for scope system threads to 0 (no quantum).Daniel Eischen2003-04-221-0/+2
| | | | Notes: svn path=/head/; revision=113881
* Add a working pthread_[gs]etconcurrency. Initial null implementationDaniel Eischen2003-04-222-0/+121
| | | | | | | | | | | | 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 Notes: svn path=/head/; revision=113871
* Add a couple asserts to pthread_cond_foo to ensure the (low-level)Daniel Eischen2003-04-225-21/+72
| | | | | | | | | | | | | | | | | | 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). Notes: svn path=/head/; revision=113870
* Add an i386-specifc hack to always set %gs. There still seemsDaniel Eischen2003-04-216-182/+284
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. Notes: svn path=/head/; revision=113786
* Remove duplicate $FreeBSD$ id.Daniel Eischen2003-04-181-3/+1
| | | | Notes: svn path=/head/; revision=113662
* Sorry folks; I accidentally committed a patch from what I was workingDaniel Eischen2003-04-1811-186/+306
| | | | | | | | | on a couple of days ago. This should be the most recent changes. Noticed by: davidxu Notes: svn path=/head/; revision=113661
* Revamp libpthread so that it has a chance of working in an SMPDaniel Eischen2003-04-1874-3888/+5324
| | | | | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=113658
* - Define a _spinunlock() function so that threading implementations may doJeff Roberson2003-03-261-0/+7
| | | | | | | | | 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. Notes: svn path=/head/; revision=112665
* Backout last commit.David Xu2003-03-151-1/+1
| | | | | | | Requested by: jhb Notes: svn path=/head/; revision=112253
* Fix a bug in rwlock. When a rwlock was locked by reader threads, aDavid Xu2003-03-141-1/+1
| | | | | | | writter thread can block reader threads to get read lock. Notes: svn path=/head/; revision=112218
* Fix cut'n'paste errorAlexey Zelkin2003-03-051-1/+1
| | | | | | | Noticed by: julian Notes: svn path=/head/; revision=111928
* MFlibc_r: add and document pthread_attr_get_np() function.Alexey Zelkin2003-03-032-0/+58
| | | | Notes: svn path=/head/; revision=111846
* Fix compiling error.David Xu2003-02-261-1/+1
| | | | Notes: svn path=/head/; revision=111542
* Insert threads interrupted by a signal while running onto the run queue.Jonathan Mini2003-02-232-26/+3
| | | | Notes: svn path=/head/; revision=111360
* Add signal logic to the build.Jonathan Mini2003-02-231-0/+2
| | | | Notes: svn path=/head/; revision=111359
* Deliver signals posted via an upcall to the appropriate thread.Jonathan Mini2003-02-176-525/+274
| | | | Notes: svn path=/head/; revision=111035
* Actually link in the attr_{set,get}stack.Alfred Perlstein2003-02-111-0/+2
| | | | Notes: svn path=/head/; revision=110677
* Add pthread_attr_getstack() and pthread_attr_setstack().Alfred Perlstein2003-02-102-0/+117
| | | | | | | Submitted by: Craig Rodrigues <rodrigc@attbi.com> Notes: svn path=/head/; revision=110636
* Schedule spinlocked threads by moving them through the work queue, insteadJonathan Mini2002-11-241-2/+15
| | | | | | | | | | of the wait queue. Approved by: re (blanket) Stolen from: davidxu Notes: svn path=/head/; revision=107202
* Get the wall clock time from the KSE mailbox, rather than doing anotherJonathan Mini2002-11-241-2/+2
| | | | | | | syscall. Notes: svn path=/head/; revision=107201
* Fix idle timeout bug, use correct current time of day.David Xu2002-11-201-2/+2
| | | | Notes: svn path=/head/; revision=107102
* Schedule an idle context to block until timeouts expire without blockingJonathan Mini2002-11-123-107/+89
| | | | | | | further upcalls. Notes: svn path=/head/; revision=106786
* Make pthread_sigmask(3) operate on the thread signal mask, not the processJonathan Mini2002-10-301-1/+27
| | | | | | | signal mask. Notes: svn path=/head/; revision=106193
* Use KSE to schedule threads.Jonathan Mini2002-10-307-257/+366
| | | | Notes: svn path=/head/; revision=106191
* Add the 'restrict' type qualifier to the prototypes of `sigaction',Robert Drehmel2002-10-021-1/+1
| | | | | | | | | `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. Notes: svn path=/head/; revision=104368
* Make libpthread KSE aware.Jonathan Mini2002-09-1626-2395/+135
| | | | | | | | Reviewed by: deischen, julian Approved by: -arch Notes: svn path=/head/; revision=103419
* Make the changes needed for libpthread to compile in its new home.Jonathan Mini2002-09-1693-227/+186
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=103388
* Remove much of the dereferencing of the fd table entries to lookDaniel Eischen2002-08-299-19/+23
| | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=102590
* Make the libc_r version of select() set the readable or writableArchie Cobbs2002-08-291-4/+6
| | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=102586
* When poll(2)'ing for readability or writability of a file descriptorArchie Cobbs2002-08-291-2/+6
| | | | | | | | | | | 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 Notes: svn path=/head/; revision=102546
* Replace various spelling with FALLTHROUGH which is lint()ablePhilippe Charnier2002-08-251-1/+1
| | | | Notes: svn path=/head/; revision=102411
* Oops, forgot to set the suspended flag for threads that are createdDaniel Eischen2002-07-091-2/+3
| | | | | | | | | | initially suspended. This was preventing such threads from getting resumed. Reported by: Bill Huey <billh@gnuppy.monkey.org> Notes: svn path=/head/; revision=99660
* Make sigpending and sigsuspend account for signals that are pending onDaniel Eischen2002-06-282-5/+27
| | | | | | | | | the process as well as pending on the current thread. Reported by: Andrew MacIntyre <andymac@bullseye.apana.org.au> Notes: svn path=/head/; revision=98976
* Add a wrapper for pselect() in order to make it a cancellation point.Daniel Eischen2002-06-282-0/+55
| | | | | | | Prompted by: wollman Notes: svn path=/head/; revision=98975
* Missed in earlier commit -- I did cvs commit src/lib/libc. Oops.Robert Watson2002-06-142-8/+0
| | | | Notes: svn path=/head/; revision=98205
* Revamp suspend and resume. While I'm here add pthread_suspend_all_np()Daniel Eischen2002-05-2413-307/+231
| | | | | | | | | | | | | | | | 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. Notes: svn path=/head/; revision=97204
* Undo namespace pollution by prefixing the globals pthread_guard_default andAlfred Perlstein2002-05-154-26/+29
| | | | | | | | | | | pthread_page_size. Fix a bunch line wrapping. Pointed out by: deischen Notes: svn path=/head/; revision=96636
* Don't use PAGE_SIZE in userland, instead use getpagesize(), this is toAlfred Perlstein2002-05-134-21/+36
| | | | | | | | | | allow running on other arches when the instructions are supported but the page size granularity is not. Glanced at by: peter Notes: svn path=/head/; revision=96501
* Use GCC's __attribute__ ((constructor)) mechanism to invoke the pthreadAlfred Perlstein2002-05-112-1/+62
| | | | | | | | | | 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. Notes: svn path=/head/; revision=96401
* Make these functions cancellation points like they should be:Archie Cobbs2002-05-025-5/+66
| | | | | | | | | | | poll(2), readv(2), select(2), wait4(2), writev(2). PR: bin/37658 Reviewed by: deischen MFC after: 1 week Notes: svn path=/head/; revision=95948
* Make sure calls to pthread_cancel() do not take effect if the targetArchie Cobbs2002-05-021-2/+4
| | | | | | | | | | | thread is already exiting. PR: bin/37614 Reviewed by: deischen MFC after: 1 week Notes: svn path=/head/; revision=95947
* The GCC developers have made good on their threats against #pragma for 3.1.David E. O'Brien2002-04-151-1/+2
| | | | | | | | | Use __weak_reference in place of the #pragma. Submitted by: eischen Notes: svn path=/head/; revision=94808
* Return correct number of total bits set in all fd_set's.Jeroen Ruigrok van der Werven2002-04-091-9/+18
| | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=94265