summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/thread.cc
Commit message (Collapse)AuthorAgeFilesLines
* cygwin: pthread timed locks: actually timeout on timeoutCorinna Vinschen2017-08-031-4/+26
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cygwin: pthread_rwlock_rdlock: don't set errno, just return error codeCorinna Vinschen2017-08-031-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cygwin: Implement pthread_rwlock_timedrdlock, pthread_rwlock_timedwrlockCorinna Vinschen2017-08-031-4/+66
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cygwin: Implement pthread_mutex_timedlockCorinna Vinschen2017-08-031-2/+30
| | | | | | | - pthread_mutex::lock now takes a PLARGE_INTEGER timeout pointer and uses that in the call to cygwait. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cygwin: simplify pthread timedwait handlingCorinna Vinschen2017-08-031-64/+59
| | | | | | | | | | | | | - Introduce inline helper pthread_convert_abstime. It converts an absolute timespec to a Windows LARGE_INTEGER timestamp, depending on the used clock. - Use this function from pthread_cond_timedwait and semaphore::timedwait - Merge semaphore::_wait and semaphore::_timedwait into single _wait method, taking a LARGER_INTEGER timestamp. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Drop redundant brackets in call to _reclaim_reentCorinna Vinschen2017-03-101-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: pthread_cond_wait: Do as Linux and BSD do.Corinna Vinschen2017-03-071-22/+5
| | | | | | | | | | | | | | | POSIX states as follows about pthread_cond_wait: If a signal is delivered to a thread waiting for a condition variable, upon return from the signal handler the thread resumes waiting for the condition variable as if it was not interrupted, or it returns zero due to spurious wakeup. Cygwin so far employs the latter behaviour, while Linux and BSD employ the former one. Align Cygwin behaviour to Linux and BSD. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Send thread names to debuggerJon Turney2016-08-231-0/+5
| | | | | | | | | | | | | | | | | | GDB since commit 24cdb46e [1] can report and use these names. Add utility function SetThreadName(), which sends a thread name to the debugger. Use that: - to set the default thread name for main thread and newly created pthreads. - in pthread_setname_np() for user thread names. - for helper thread names in cygthread::create() - for helper threads which are created directly with CreateThread. Note that there can still be anonymous threads, created by system or injected DLLs. [1] https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=24cdb46e9f0a694b4fbc11085e094857f08c0419
* Add pthread_getname_np and pthread_setname_npJon Turney2016-08-231-1/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds pthread_getname_np and pthread_setname_np. These were added to glibc in 2.12[1] and are also present in some form on NetBSD and several UNIXes. The code is based on NetBSD's implementation with changes to better match Linux behaviour. Implementation quirks: * pthread_setname_np with a NULL pointer segfaults (as linux) * pthread_setname_np returns ERANGE for names longer than 16 characters (as linux) * pthread_getname_np with a NULL pointer returns EFAULT (as linux) * pthread_getname_np with a buffer length of less than 16 returns ERANGE (as linux) * pthread_getname_np truncates the thread name to fit the buffer length. This guarantees success even when the default thread name is longer than 16 characters, but means there is no way to discover the actual length of the thread name. (Linux always truncates the thread name to 16 characters) * Changing program_invocation_short_name changes the default thread name (on linux, it has no effect on the default thread name) I'll leave it up to you to decide if any of these matter. This is implemented via class pthread_attr to make it easier to add pthread_attr_[gs]etname_np (present in NetBSD and some UNIXes) should it ever be added to Linux (or we decide we want it anyway). [1] https://sourceware.org/git/?p=glibc.git;a=blob;f=NEWS
* Reinstantiate Cygwin function called `__getreent'Corinna Vinschen2016-08-181-0/+7
| | | | | | | | | | This partially reverts commit 10a30e7 as far as the Cygwin version of the __getreent function is concerned. Remove _COMPILING_NEWLIB guard only allowing to use __getreent inline function when building newlib, since we wan to use it in Cygwin as well. Signed-off-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Stefan Assmann <sassmann@redhat.com>
* Remove redundant macro and function called `__getreent'Corinna Vinschen2016-07-271-7/+0
| | | | | | Just rely on the inline version in include/cygwin/config.h Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Switching the Cygwin DLL to LGPLv3+, dropping commercial buyout optioncygwin-2_5_2-releaseCorinna Vinschen2016-06-231-3/+0
| | | | | | | | | | | | | | Bump GPLv2+ to GPLv3+ for some files, clarify BSD 2-clause. Everything else stays under GPLv3+. New Linking Exception exempts resulting executables from LGPLv3 section 4. Add CONTRIBUTORS file to keep track of licensing. Remove 'Copyright Red Hat Inc' comments. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix thread priority handlingCorinna Vinschen2016-05-201-9/+11
| | | | | | | | | | | | | | | So far pthread::postcreate() only sets the thread priority at all, only if the inherit-scheduler attribute is PTHREAD_EXPLICIT_SCHED. This completely ignores the PTHREAD_INHERIT_SCHED case, since in contrast to POSIX, a thread does not inherit its priority from the creating thread, but always starts with THREAD_PRIORITY_NORMAL. pthread_getschedparam() only returns what's stored in the thread attributes, not the actual thread priority. This patch fixes both problems. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Rewrite scheduler functions getting and setting process and thread priorityCorinna Vinschen2016-05-201-1/+1
| | | | | | | | | | | | | | | | So far the scheduler priority handling is not POSIX compatible. The priorities use a range of -14 up to +15, which means it's not clear if the POSIX-required return value of -1 in case of an error is *really* an error or just the valid priority value -1. Even more confusing, -14 is the *max* value and 15 is the *min* value. Last but not least this range doesn't match the POSIX requirement of at least 32 priority values. This patch cleans up scheduler priority handling and moves the valid priority range to 1 (min) - 32 (max). It also adds a function sched_get_thread_priority() which will help to make thread priority more POSIX-like. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Don't test pthread objects for being already initialized at init timeCorinna Vinschen2016-04-201-12/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | For all pthread init functions, POSIX says Results are undefined if pthread_FOO_init() is called specifying an already initialized pthread_FOO object. So far our pthread init functions tested the incoming object if it's already an initialized object and, if so, returned EBUSY. That's ok *iff* the object was already initialized. However, as the example in https://cygwin.com/ml/cygwin/2016-04/msg00473.html shows, an uninitialized pthread object could also accidentally look like an initialized object and then returning EBUSY is not ok. Consequentially, all those tests are dangerous. Per POSIX, an application has to know what its doing when calling any of the pthread init functions anyway, and re-initializing the object is just as well as undefined behaviour as is returning EBUSY on already initialized objects. * thread.cc (pthread_attr_init): Drop check for already initialized object. (pthread_condattr_init): Ditto. (pthread_rwlockattr_init): Ditto. (pthread_mutexattr_init): Ditto. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix typoed comparisonPeter Foley2016-03-201-1/+1
| | | | | | | winsup/cygwin/ChangeLog * thread.cc (semaphore::open): Fix mistaken conditional. Signed-off-by: Peter Foley <pefoley2@pefoley.com>
* Spinlock spin with pause instructionVáclav Haisman2016-03-111-1/+19
| | | | | | | | | | | | Hi. I have noticed that Cygwin's spinlock goes into heavy sleeping code for each spin. It seems it would be a good idea to actually try to spin a bit first. There is this 'pause' instruction which let's the CPU make such busy loops be less busy. Here is a patch to do this. -- VH
* POSIX barrier implementation, take 3Václav Haisman2016-02-131-0/+262
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The attached patch should address all of the review comments. Modifed change log: Newlib: * libc/include/sys/features.h (_POSIX_BARRIERS): Define for Cygwin. * libc/include/sys/types.h (pthread_barrier_t) (pthread_barrierattr_t): Do not define for Cygwin. Cygwin: * common.din (pthread_barrierattr_init) (pthread_barrierattr_setpshared, pthread_barrierattr_getpshared) (pthread_barrierattr_destroy, pthread_barrier_init) (pthread_barrier_destroy, pthread_barrier_wait): Export. * include/cygwin/types.h (pthread_barrierattr_t) (pthread_barrier_t): Declare. * include/pthread.h (PTHREAD_BARRIER_SERIAL_THREAD) (pthread_barrierattr_init, pthread_barrierattr_setpshared) (pthread_barrierattr_getpshared, pthread_barrierattr_destroy) (pthread_barrier_init, pthread_barrier_destroy) (pthread_barrier_wait): Declare. * thread.h (PTHREAD_BARRIER_MAGIC) (PTHREAD_BARRIERATTR_MAGIC): Define. (class pthread_barrierattr, class pthread_barrier): Declare. * thread.cc (delete_and_clear): New local helper function. (class pthread_barrierattr, class pthread_barrier): Implement. * miscfuncs.h (likely, unlikely): New macros. -- VH
* Remove unnecessary locking in pthread_setcancelstate/pthread_setcanceltypeCorinna Vinschen2015-12-081-26/+10
| | | | | | | * thread.cc (pthread::setcancelstate): Remove unnecessary locking. (pthread::setcanceltype): Ditto. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix sigwait and pthread_kill return values in case of errorCorinna Vinschen2015-10-301-1/+5
| | | | | | | | * signal.cc (sigwait): Fix return value to reflect errno in case of error according to POSIX. Never return EINTR. * thread.cc (pthread_kill): Return errno if sig_send failed. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix memory leak in pthread_getattr_npCorinna Vinschen2015-10-211-5/+3
| | | | | | | * thread.cc (pthread_getattr_np): Fix memory leak, remove usage of malloc for small local buffer. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Implement correct RLIMIT_STACK handlingCorinna Vinschen2015-07-051-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * miscfuncs.cc (struct pthread_wrapper_arg): Add member guardsize. (pthread_wrapper): Set thread stack guarantee according to guardsize. Tweak assembler code so that $rax/$eax is not required by GCC to prepare the wrapper_arg value. (CygwinCreateThread): Fix deadzone handling. Drop setting a "POSIX" guardpage (aka page w/ PAGE_NOACCESS). Always use Windows guard pages instead. On post-XP systems (providing SetThreadStackGuarantee) always set up stack Windows like with reserved/commited areas and movable guard pages. Only on XP set up stack fully commited if the guardpage size is not the default system guardpage size. Fill out pthread_wrapper_arg::guardsize. Improve comments. * resource.cc: Implement RSTACK_LIMIT Linux-like. (DEFAULT_STACKSIZE): New macro. (DEFAULT_STACKGUARD): Ditto. (rlimit_stack_guard): New muto. (rlimit_stack): New global variable holding current RSTACK_LIMIT values. (__set_rlimit_stack): Set rlimit_stack under lock. (__get_rlimit_stack): Initialize rlimit_stack from executable header and return rlimit_stack values under lock. (get_rlimit_stack): Filtering function to return useful default stacksize from rlimit_stack.rlim_cur value. (getrlimit): Call __get_rlimit_stack in RLIMIT_STACK case. (setrlimit): Call __set_rlimit_stack in RLIMIT_STACK case. * thread.cc (pthread::create): Fetch default stacksize calling get_rlimit_stack. (pthread_attr::pthread_attr): Fetch default guardsize calling wincap.def_guard_page_size. (pthread_attr_getstacksize): Fetch default stacksize calling get_rlimit_stack. * thread.h (PTHREAD_DEFAULT_STACKSIZE): Remove. (PTHREAD_DEFAULT_GUARDSIZE): Remove. (get_rlimit_stack): Declare. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* * fhandler_tape.cc (fhandler_dev_tape::_lock): Add cw_sig_restart toCorinna Vinschen2015-02-251-4/+5
| | | | | | | | | | cygwait call. * thread.cc (pthread_mutex::lock): Ditto. (semaphore::_timedwait): Fix formatting. (semaphore::_wait): Ditto. * thread.h (fast_mutex::lock): Ditto. ...and fix ChangeLog accordingly.
* * cygwait.h (enum cw_wait_mask): Add cw_sig_restart. Add commentsCorinna Vinschen2015-02-231-2/+3
| | | | | | | | | to explain the meaning of the possible values. * cygwait.cc (is_cw_sig_restart): Define. (is_cw_sig_handle): Check for cw_sig_restart as well. (cygwait): Restart always if cw_sig_restart is set. * thread.cc (pthread::join): Call cygwait with cw_sig_restart flag to avoid having to handle signals at all.
* * cygheap.cc (init_cygheap::init_tls_list): Accommodate threadlistCorinna Vinschen2014-11-281-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | having a new type threadlist_t *. Convert commented out code into an #if 0. Create thread mutex. Explain why. (init_cygheap::remove_tls): Drop timeout value. Always wait infinitely for tls_sentry. Return mutex HANDLE of just deleted threadlist entry. (init_cygheap::find_tls): New implementation taking tls pointer as search parameter. Return threadlist_t *. (init_cygheap::find_tls): Return threadlist_t *. Define ix as auto variable. Drop exception handling since crash must be made impossible due to correct synchronization. Return with locked mutex. * cygheap.h (struct threadlist_t): Define. (struct init_cygheap): Convert threadlist to threadlist_t type. (init_cygheap::remove_tls): Align declaration to above change. (init_cygheap::find_tls): Ditto. (init_cygheap::unlock_tls): Define. * cygtls.cc (_cygtls::remove): Unlock and close mutex when finishing. * exceptions.cc (sigpacket::process): Lock _cygtls area of thread before accessing it. * fhandler_termios.cc (fhandler_termios::bg_check): Ditto. * sigproc.cc (sig_send): Ditto. * thread.cc (pthread::exit): Ditto. Add comment. (pthread::cancel): Ditto.
* * cygheap.cc (init_cygheap::find_tls): Add comment.Corinna Vinschen2014-11-281-1/+3
| | | | | | | | | | | | | | | | * cygtls.cc (well_known_dlls): Rephrase comment. (bloda_detect): New function. (_cygtls::call2): Call init_thread and bloda_detect for non-pthread threads only. (_cygtls::remove): Move remove_tls and remove_wq calls up to run first. * miscfuncs.cc (struct pthread_wrapper_arg): Rename from struct thread_wrapper_arg. (pthread_wrapper): Rename from thread_wrapper and drop "static". Fix comment. Drop call to _cygtls::remove. Call api_fatal rather than ExitThread. Explain why. * miscfuncs.h (pthread_wrapper): Declare pthread_wrapper. * thread.cc (pthread::exit): Add a FIXME comment. Call _cygtls::remove before calling ExitThread.
* * cygtls.cc (_cygtls::remove): Revert previous patch.Corinna Vinschen2014-08-251-5/+0
| | | | | | | | | | | | | | | | | * cygtls.h (struct _local_storage): Move pathbufs back here. (class san/x86_64): Revert class. Save and restore pathbufs counters only. (class san/i686): Revert saving and restoring pathbufs counters. (__try/x86_64): Add a san variable and call it's setup method. (__except/x86_64): Call san::leave to restore pathbufs counters. * gendef (_sigbe): Revert previous change. * thread.cc (verifyable_object_state): Remove gcc 4.7 workaround in forward declaration as well. * tls_pbuf.cc (tls_pbuf): Revert previous change. * tls_pbuf.h (class tmp_pathbuf): Accommodate reverting pathbufs to locals structure. * tlsoffsets.h: Regenerate. * tlsoffsets64.h: Regenerate.
* * Throughout, use __try/__except/__endtry blocks, rather than myfaultCorinna Vinschen2014-08-221-120/+135
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | handler. * cygtls.cc (_cygtls::remove): Accommodate the fact that pathbufs has been moved from _local_storage to _cygtls. * cygtls.h (class tls_pathbuf): Add comment to hint to gendef usage of counters. Change type of counters to uint32_t for clarity. Remove _cygtls as friend class. (struct _local_storage): Move pathbufs from here... (struct _cygtls): ...to here, allowing to access it from _sigbe. (class san): Only define on 32 bit. Remove errno, _c_cnt and _w_cnt members. (san::setup): Drop parameter. Don't initialize removed members. (san::leave): Don't set removed members. (class myfault): Only define on 32 bit. (myfault::faulted): Only keep implementation not taking any parameter. Drop argument in call to sebastian.setup. (__try/__leave/__except/__endtry): Implement to support real SEH. For now stick to SJLJ on 32 bit. * dcrt0.cc (dll_crt0_0): Drop 64 bit call to exception::install_myfault_handler. * exception.h (exception_handler): Define with EXCEPTION_DISPOSITION as return type. (PDISPATCHER_CONTEXT): Define as void * on 32 bit. Define as pointer to _DISPATCHER_CONTEXT on 64 bit. (class exception): Define separately for 32 and 64 bit. (exception::myfault): Add handler for myfault SEH handling on 64 bit. (exception::exception): Fix mangled method name to account for change in type of last parameter. (exception::install_myfault_handler): Remove. * exceptions.cc (exception::myfault_handle): Remove. (exception::myfault): New SEH handler for 64 bit. * gendef (_sigbe): Set tls_pathbuf counters to 0 explicitely when returning to the caller. * ntdll.h: Move a comment to a better place. (struct _SCOPE_TABLE): Define on 64 bit. * thread.cc (verifyable_object_isvalid): Remove gcc 4.7 workaround. * tls_pbuf.cc (tls_pbuf): Fix to accommodate new place of pathbufs. (tls_pathbuf::destroy): Change type of loop variables to uint32_t. * tls_pbuf.h (class tmp_pathbuf): Change type of buffer counters to uint32_t. Accommodate new place of pathbufs. * tlsoffsets.h: Regenerate. * tlsoffsets64.h: Regenerate.
* * thread.cc (pthread::init_mainthread): Initialize thread mutex toCorinna Vinschen2014-07-211-0/+4
| | | | type PTHREAD_MUTEX_RECURSIVE, just as for any other thread.
* * thread.cc (pthread::create): Handle stackaddr as upper bound address.Corinna Vinschen2014-07-161-9/+33
| | | | | | | | | | | | | | | | | Add comment. (pthread_attr_setstack): Store upper bound address in stackaddr. Explain why. (pthread_attr_getstack): Handle stackaddr as upper bound address. Add comment. (pthread_attr_setstackaddr): Add comment. (pthread_attr_getstackaddr): Add comment. (pthread_attr_getstacksize): Return default stacksize if stacksize has not been set by the application, just as on Linux. Add comment. (pthread_getattr_np): Store upper bound address in stackaddr. Explain why. * include/pthread.h: Remove outdated comment. (pthread_attr_getstackaddr): Mark as deprecated, as on Linux. (pthread_attr_setstackaddr): Ditto.
* * thread.cc (pthread_mutex::pthread_mutex): Change default typeCorinna Vinschen2014-07-141-4/+4
| | | | | | | | | | | to PTHREAD_MUTEX_NORMAL. (pthread_mutex::unlock): Return EPERM if the mutex has no owner and the mutex type is PTHREAD_MUTEX_ERRORCHECK, as on Linux. (pthread_mutexattr::pthread_mutexattr): Ditto. (pthread_mutex_unlock): Do not fail if mutex is a normal mutex initializer. * include/pthread.h (PTHREAD_MUTEX_INITIALIZER): Redefine as PTHREAD_NORMAL_MUTEX_INITIALIZER_NP.
* * thread.cc (pthread::create): Use PTHREAD_DEFAULT_STACKSIZE stacksizeCorinna Vinschen2014-07-091-13/+10
| | | | | | | | | | | | if attr.stacksize is 0. (pthread_attr::pthread_attr): Initialize stacksize to 0 to align more closely to Linux. (pthread_attr_getstack): Fix incorrect stackaddr computation. Return stackaddr just like pthread_attr_getstackaddr. Remove slightly off comment. (pthread_attr_getstackaddr): Remove slightly off comment. (pthread_getattr_np): Return stackaddr and stacksize based on the full allocated stackarea.
* * spawn.cc (find_exec): Initialize err (CID 60111).Corinna Vinschen2014-06-231-1/+2
| | | | | | | | * strace.cc (strace::activate): Fix potential buffer overrun (CID 59938) * syscalls.cc (popen): Close parent pipe descriptor via fclosing fp on error to avoid resource leak (CID 59981). * thread.cc (pthread::exit): Avoid accessing cygtls member after deleting "this" (CID 60217).
* * dtable.cc (dtable::extend): Change local variable new_size to size_tCorinna Vinschen2013-12-011-2/+2
| | | | | | as well. * thread.cc: Fix comment.
* * thread.cc (semaphore::_getvalue): Set *sval as appropriate. Set errno andChristopher Faylor2013-09-251-2/+12
| | | | return -1 on error.
* * ntdll.h (struct _SEMAPHORE_BASIC_INFORMATION): Define.Corinna Vinschen2013-07-231-27/+31
| | | | | | | | | | | | | | | | | | | | | | (enum _SEMAPHORE_INFORMATION_CLASS): Define. (NtQuerySemaphore): Declare. * thread.h (class semaphore): Add member startvalue. (semaphore::fixup_before_fork): New inline method. (semaphore::_fixup_before_fork): Declare. * thread.cc (MTinterface::fixup_before_fork): Additionally call semaphore::fixup_before_fork. (semaphore::semaphore): Set currentvalue to -1. Set startvalue to incoming initializer value. (semaphore::_getvalue): Just query semaphore using NtQuerySemaphore rather then using WFSO/Release. (semaphore::_post): Drop setting currentvalue. It's not thread-safe. (semaphore::_trywait): Ditto. (semaphore::_timedwait): Ditto. (semaphore::_wait): Ditto. (semaphore::_fixup_before_fork): New method, setting currentvalue from actual windows semaphore right before fork. (semaphore::_fixup_after_fork): Drop kludge from 2013-07-10. Drop FIXME comment.
* * gentlsoffsets: Clean up a little.Christopher Faylor2013-07-101-5/+5
| | | | | | * thread.cc (semaphore::_fixup_after_fork): Report on potential problem parameter. Make sure that currentvalue is never zero. (semaphore::init): Make cosmetic change.
* Throughout, (mainly in fhandler*) fix remaining gcc 4.7 mismatchYaakov Selkowitz2013-05-011-4/+4
| | | | | | | | | warnings between regparm definitions and declarations. * smallprint.cc (__small_vswprintf): Conditionalize declaration and setting of l_opt for only x86_64. * spawn.cc (child_info_spawn::worker): Remove unused 'pid' variable. * thread.cc (verifyable_object_isvalid): Temporarily define as non-inline with gcc 4.7+, regardless of target.
* * Merge in cygwin-64bit-branch.Corinna Vinschen2013-04-231-27/+42
|
* * cygheap.cc (init_cygheap::find_tls): Add a comment.Christopher Faylor2013-04-071-0/+3
| | | | | | | | * dcrt0.cc (parent_sigmask): Delete. (dll_crt0_1): Use spawn_info->moreinfo->sigmask rather than saved parent signal mask. * thread.cc (pthread::thread_init_wrapper): Add comment stressing the importance of maintaining ordering of statements.
* * child_info.h (cygheap_exec_info::sigmask): Declare new field.Christopher Faylor2013-03-311-7/+7
| | | | | | | | | | | | | | | | | | | | | | | * cygheap.cc (init_cygheap::find_tls): Rename threadlist_ix -> ix. Only take one pass through thread list, looking for eligible threads to signal. Set a new param indicating that function has found a sigwait* mask. * cygheap.h (init_cygheap::find_tls): Reflect new parameter. * dcrt0.cc (parent_sigmask): New variable. (child_info_spawn::handle_spawn): Save parent's signal mask here. (dll_crt0_1): Restore parent's signal mask to tls sigmask as appropriate. Call sig_dispatch_pending to flush signal queue when we can finally do something with signals. * exceptions.cc (sigpacket::process): Avoid attempting to handle signals if we haven't finished initializing. Rely on the fact that find_tls will do mask checking and don't do it again. Delete ill-named 'dummy' variable. * sigproc.cc (cygheap_exec_info::alloc): Save calling thread's signal mask in new sigmask field. (wait_sig): Try to debug when WFSO fails and DEBUGGING is defined. * thread.cc (pthread::set_tls_self_pointer): Make this a true automatic method rather than inexplicably relying on a thread parameter. (pthread::thread_init_wrapper): Accommodate set_tls_self_pointer change to non-static. Initialize sigmask before setting tid or suffer signal races. * ehread.h (pthread::set_tls_self_pointer): Make non-static, delete parameter.
* Throughout, update copyrights to reflect dates which correspond to main-branchChristopher Faylor2013-01-211-2/+2
| | | | checkins. Regularize copyright format.
* * thread.cc (pthread_rwlock::lookup_reader): Remove parameter: always assumeChristopher Faylor2013-01-071-18/+15
| | | | | | | | | | | that we're looking for the current thread. (pthread_rwlock::tryrdlock): Eliminate self variable. Accommodate change in lookup_reader(). (pthread_rwlock::unlock): Ditto. (pthread_rwlock::rdlock): Ditto. Move add_reader call after writer tests to more closely mimic old behavior. (pthread_rwlock::wrlock): Accommodate change in lookup_reader(). * thread.h ((pthread_rwlock::lookup_reader): Eliminate argument.
* * thread.cc (pthread_rwlock::add_reader): Perform new operation here and returnChristopher Faylor2013-01-071-18/+13
| | | | | | | | pointer to allocated RWLOCK_READER structure. (pthread_rwlock::rdlock): Reorganize to reflect new add_reader functionality. (pthread_rwlock::tryrdlock): Ditto. Remove unneeded call to lookup_reader(). * thread.h (pthread_rwlock::RWLOCK_READER::RWLOCK_READER): New constructor. (pthread_rwlock::add_reader): Reflect new functionality.
* * select.h (select_stuff): Remove variable names from parameter declarations.Christopher Faylor2012-12-221-2/+2
| | | | | | | | | | | | | | | | (select_info): Ditto. (select_record::dump_select_record): Declare new debugging-only function. (select_info): Zero all fields. (select_pipe_info): Ditto. (select_socket_info): Ditto. (select_serial_info): Ditto. (select_mailslot_info): Ditto. * select.cc (select_record::dump_select_record): Define new debugging-only function. (select_stuff::test_and_set): Call dump_select_record when debugging. * thread.cc (pthread_mutex::unlock): Revert setting of tid to NULL since, in this context, it is a number, not a pointer. (pthread_spinlock::unlock): Ditto.
* * DevNotes: Add entry cgf-000018.Christopher Faylor2012-12-211-1/+1
| | | | | | | | | | | | | | * init.cc (dll_entry): Grab process lock before exiting to ensure that thread doesn't exit before parent if parent is exiting. * _cygtls.cc (_cygtls::call2): Revert previous 2012-12-21 change. * miscfuncs.cc (thread_wrapper): Ditto. * thread.cc (pthread::exit): Ditto. * sigproc.cc (exit_thread): Ditto. (wait_sig): Ditto. * sync.cc (muto::release): Ditto. * sync.h (muto::release): Ditto. * sigproc.h (__SIGTHREADEXIT): Delete enum. (exit_thread): Delete declaration.
* * DevNotes: Add entry cgf-000017.Christopher Faylor2012-12-211-3/+3
| | | | | | | | | | | | | | | | | | * _cygtls.cc (_cygtls::call2): Use new exit_thread function in place of ExitThread. * miscfuncs.cc (thread_wrapper): Ditto. * thread.cc (pthread::exit): Ditto. (pthread_mutex::unlock): Set tid to NULL rather than 0. (pthread_spinlock::unlock): Ditto. * pinfo.cc (commune_process): Actually call lock_process constructor. * sigproc.cc (exit_thread): New function. (wait_sig): Handle __SIGTHREADEXIT case. Don't just block rather than returning from this function. * sigproc.h (__SIGTHREADEXIT): New enum. (exit_thread): Declare. * sync.cc (muto::release): Accept a tls command-line argument. * sync.h (muto::release): Accept a tls command-line parameter. Default to &_my_tls.
* whitespace cleanupChristopher Faylor2012-08-161-5/+5
|
* Rename cancelable_wait -> cygwait throughout.Christopher Faylor2012-08-151-9/+9
| | | | | * DevNotes: Add entry cgf-000015. * cygwait.h (cygwait): Don't allow an optional PLARGE_INTERGER argument.
* * thread.cc (semaphore::_fixup_after_fork): Fix Win32 error output inCorinna Vinschen2012-08-141-1/+1
| | | | api_fatal call.