mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-20 05:19:21 +08:00
Perform whitespace cleanup throughout.
* dcrt0.cc (signal_shift_subtract): Eliminate ancient backwards compatibility. (check_sanity_and_sync): Ditto. * winsup.h (SIGTOMASK): Ditto. Just use constant in signal calculation. * include/cygwin/version: Remove backwards signal mask compatibility define. * path.cc (symlink_info::check_sysfile): Cosmetic change. * registry.cc (get_registry_hive_path): Remove unneeded variable. * exceptions.cc (handle_sigsuspend): Eliminate thread signal mask and use either main sigmask or current thread sigmask. (set_process_mask): Ditto. (sighold): Ditto. (sigrelse): Ditto. (sigset): Ditto. (set_process_mask_delta): Ditto. (_cygtls::call_signal_handler): Ditto. * fhandler_process.cc (format_process_status): Ditto. * fhandler_termios.cc (fhandler_termios::bg_check): Ditto. * pinfo.h (class pinfo): Ditto. * select.cc (pselect): Ditto. * signal.cc (sigprocmask): Ditto. (abort): Ditto. (sigpause): Ditto. (sigsend): Ditto. (wait_sig): Ditto. * thread.h (pthread::parent_tls): New member. * thread.cc (pthread::pthread): Record parent_tls here. (pthread::thread_init_wrapper): Initialize sigmask from parent thread.
This commit is contained in:
parent
d039978069
commit
70300fdb1c
@ -1,3 +1,40 @@
|
|||||||
|
2008-02-15 Christopher Faylor <me+cygwin@cgf.cx>
|
||||||
|
|
||||||
|
Perform whitespace cleanup throughout.
|
||||||
|
|
||||||
|
* dcrt0.cc (signal_shift_subtract): Eliminate ancient backwards
|
||||||
|
compatibility.
|
||||||
|
(check_sanity_and_sync): Ditto.
|
||||||
|
* winsup.h (SIGTOMASK): Ditto. Just use constant in signal
|
||||||
|
calculation.
|
||||||
|
* include/cygwin/version: Remove backwards signal mask compatibility
|
||||||
|
define.
|
||||||
|
|
||||||
|
* path.cc (symlink_info::check_sysfile): Cosmetic change.
|
||||||
|
|
||||||
|
* registry.cc (get_registry_hive_path): Remove unneeded variable.
|
||||||
|
|
||||||
|
* exceptions.cc (handle_sigsuspend): Eliminate thread signal mask and
|
||||||
|
use either main sigmask or current thread sigmask.
|
||||||
|
(set_process_mask): Ditto.
|
||||||
|
(sighold): Ditto.
|
||||||
|
(sigrelse): Ditto.
|
||||||
|
(sigset): Ditto.
|
||||||
|
(set_process_mask_delta): Ditto.
|
||||||
|
(_cygtls::call_signal_handler): Ditto.
|
||||||
|
* fhandler_process.cc (format_process_status): Ditto.
|
||||||
|
* fhandler_termios.cc (fhandler_termios::bg_check): Ditto.
|
||||||
|
* pinfo.h (class pinfo): Ditto.
|
||||||
|
* select.cc (pselect): Ditto.
|
||||||
|
* signal.cc (sigprocmask): Ditto.
|
||||||
|
(abort): Ditto.
|
||||||
|
(sigpause): Ditto.
|
||||||
|
(sigsend): Ditto.
|
||||||
|
(wait_sig): Ditto.
|
||||||
|
* thread.h (pthread::parent_tls): New member.
|
||||||
|
* thread.cc (pthread::pthread): Record parent_tls here.
|
||||||
|
(pthread::thread_init_wrapper): Initialize sigmask from parent thread.
|
||||||
|
|
||||||
2008-02-14 Corinna Vinschen <corinna@vinschen.de>
|
2008-02-14 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* cygheap.cc (cwcsdup): New function.
|
* cygheap.cc (cwcsdup): New function.
|
||||||
|
@ -74,14 +74,6 @@ _cygtls NO_COPY *_main_tls;
|
|||||||
|
|
||||||
bool NO_COPY cygwin_finished_initializing;
|
bool NO_COPY cygwin_finished_initializing;
|
||||||
|
|
||||||
/* Used in SIGTOMASK for generating a bit for insertion into a sigset_t.
|
|
||||||
This is subtracted from the signal number prior to shifting the bit.
|
|
||||||
In older versions of cygwin, the signal was used as-is to shift the
|
|
||||||
bit for masking. So, we'll temporarily detect this and set it to zero
|
|
||||||
for programs that are linked using older cygwins. This is just a stopgap
|
|
||||||
measure to allow an orderly transfer to the new, correct sigmask method. */
|
|
||||||
unsigned NO_COPY int signal_shift_subtract = 1;
|
|
||||||
|
|
||||||
MTinterface _mtinterf;
|
MTinterface _mtinterf;
|
||||||
|
|
||||||
bool NO_COPY _cygwin_testing;
|
bool NO_COPY _cygwin_testing;
|
||||||
@ -443,10 +435,6 @@ check_sanity_and_sync (per_process *p)
|
|||||||
if (p->api_major > cygwin_version.api_major)
|
if (p->api_major > cygwin_version.api_major)
|
||||||
api_fatal ("cygwin DLL and APP are out of sync -- API version mismatch %d > %d",
|
api_fatal ("cygwin DLL and APP are out of sync -- API version mismatch %d > %d",
|
||||||
p->api_major, cygwin_version.api_major);
|
p->api_major, cygwin_version.api_major);
|
||||||
|
|
||||||
if (CYGWIN_VERSION_DLL_MAKE_COMBINED (p->dll_major, p->dll_minor) <=
|
|
||||||
CYGWIN_VERSION_DLL_BAD_SIGNAL_MASK)
|
|
||||||
signal_shift_subtract = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
child_info NO_COPY *child_proc_info = NULL;
|
child_info NO_COPY *child_proc_info = NULL;
|
||||||
|
@ -682,9 +682,9 @@ handle_sigsuspend (sigset_t tempmask)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sigset_t oldmask = myself->getsigmask (); // Remember for restoration
|
sigset_t oldmask = _my_tls.sigmask; // Remember for restoration
|
||||||
|
|
||||||
set_signal_mask (tempmask, myself->getsigmask ());
|
set_signal_mask (tempmask, _my_tls.sigmask);
|
||||||
sigproc_printf ("oldmask %p, newmask %p", oldmask, tempmask);
|
sigproc_printf ("oldmask %p, newmask %p", oldmask, tempmask);
|
||||||
|
|
||||||
pthread_testcancel ();
|
pthread_testcancel ();
|
||||||
@ -995,8 +995,7 @@ ctrl_c_handler (DWORD type)
|
|||||||
extern "C" void __stdcall
|
extern "C" void __stdcall
|
||||||
set_process_mask (sigset_t newmask)
|
set_process_mask (sigset_t newmask)
|
||||||
{
|
{
|
||||||
set_signal_mask (newmask, myself->getsigmask ());
|
set_signal_mask (newmask, _my_tls.sigmask);
|
||||||
sigproc_printf ("mask now %p\n", myself->getsigmask ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
@ -1010,9 +1009,9 @@ sighold (int sig)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
mask_sync.acquire (INFINITE);
|
mask_sync.acquire (INFINITE);
|
||||||
sigset_t mask = myself->getsigmask ();
|
sigset_t mask = _my_tls.sigmask;
|
||||||
sigaddset (&mask, sig);
|
sigaddset (&mask, sig);
|
||||||
set_signal_mask (mask, myself->getsigmask ());
|
set_signal_mask (mask, _my_tls.sigmask);
|
||||||
mask_sync.release ();
|
mask_sync.release ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1028,9 +1027,9 @@ sigrelse (int sig)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
mask_sync.acquire (INFINITE);
|
mask_sync.acquire (INFINITE);
|
||||||
sigset_t mask = myself->getsigmask ();
|
sigset_t mask = _my_tls.sigmask;
|
||||||
sigdelset (&mask, sig);
|
sigdelset (&mask, sig);
|
||||||
set_signal_mask (mask, myself->getsigmask ());
|
set_signal_mask (mask, _my_tls.sigmask);
|
||||||
mask_sync.release ();
|
mask_sync.release ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1050,7 +1049,7 @@ sigset (int sig, _sig_func_ptr func)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mask_sync.acquire (INFINITE);
|
mask_sync.acquire (INFINITE);
|
||||||
sigset_t mask = myself->getsigmask ();
|
sigset_t mask = _my_tls.sigmask;
|
||||||
/* If sig was in the signal mask return SIG_HOLD, otherwise return the
|
/* If sig was in the signal mask return SIG_HOLD, otherwise return the
|
||||||
previous disposition. */
|
previous disposition. */
|
||||||
if (sigismember (&mask, sig))
|
if (sigismember (&mask, sig))
|
||||||
@ -1068,7 +1067,7 @@ sigset (int sig, _sig_func_ptr func)
|
|||||||
signal (sig, func);
|
signal (sig, func);
|
||||||
sigdelset (&mask, sig);
|
sigdelset (&mask, sig);
|
||||||
}
|
}
|
||||||
set_signal_mask (mask, myself->getsigmask ());
|
set_signal_mask (mask, _my_tls.sigmask);
|
||||||
mask_sync.release ();
|
mask_sync.release ();
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
@ -1090,11 +1089,11 @@ set_process_mask_delta ()
|
|||||||
if (_my_tls.deltamask & SIG_NONMASKABLE)
|
if (_my_tls.deltamask & SIG_NONMASKABLE)
|
||||||
oldmask = _my_tls.oldmask; /* from handle_sigsuspend */
|
oldmask = _my_tls.oldmask; /* from handle_sigsuspend */
|
||||||
else
|
else
|
||||||
oldmask = myself->getsigmask ();
|
oldmask = _my_tls.sigmask;
|
||||||
newmask = (oldmask | _my_tls.deltamask) & ~SIG_NONMASKABLE;
|
newmask = (oldmask | _my_tls.deltamask) & ~SIG_NONMASKABLE;
|
||||||
sigproc_printf ("oldmask %p, newmask %p, deltamask %p", oldmask, newmask,
|
sigproc_printf ("oldmask %p, newmask %p, deltamask %p", oldmask, newmask,
|
||||||
_my_tls.deltamask);
|
_my_tls.deltamask);
|
||||||
myself->setsigmask (newmask);
|
_my_tls.sigmask = newmask;
|
||||||
mask_sync.release ();
|
mask_sync.release ();
|
||||||
return oldmask;
|
return oldmask;
|
||||||
}
|
}
|
||||||
@ -1362,7 +1361,7 @@ _cygtls::call_signal_handler ()
|
|||||||
sigact (thissig, &thissi, NULL);
|
sigact (thissig, &thissi, NULL);
|
||||||
}
|
}
|
||||||
incyg = 1;
|
incyg = 1;
|
||||||
set_signal_mask (this_oldmask, myself->getsigmask ());
|
set_signal_mask (this_oldmask, _my_tls.sigmask);
|
||||||
if (this_errno >= 0)
|
if (this_errno >= 0)
|
||||||
set_errno (this_errno);
|
set_errno (this_errno);
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ details. */
|
|||||||
#include "dtable.h"
|
#include "dtable.h"
|
||||||
#include "cygheap.h"
|
#include "cygheap.h"
|
||||||
#include "ntdll.h"
|
#include "ntdll.h"
|
||||||
|
#include "cygtls.h"
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <sys/sysmacros.h>
|
#include <sys/sysmacros.h>
|
||||||
@ -812,7 +813,7 @@ format_process_status (_pinfo *p, char *destbuf, size_t maxsize)
|
|||||||
p->gid, p->gid, p->gid, p->gid,
|
p->gid, p->gid, p->gid, p->gid,
|
||||||
vmsize >> 10, 0, vmrss >> 10, vmdata >> 10, 0,
|
vmsize >> 10, 0, vmrss >> 10, vmdata >> 10, 0,
|
||||||
vmtext >> 10, vmlib >> 10,
|
vmtext >> 10, vmlib >> 10,
|
||||||
0, 0, p->getsigmask ()
|
0, 0, _my_tls.sigmask
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ fhandler_termios::bg_check (int sig)
|
|||||||
int pgid_gone = !pid_exists (myself->pgid);
|
int pgid_gone = !pid_exists (myself->pgid);
|
||||||
int sigs_ignored =
|
int sigs_ignored =
|
||||||
((void *) global_sigs[sig].sa_handler == (void *) SIG_IGN) ||
|
((void *) global_sigs[sig].sa_handler == (void *) SIG_IGN) ||
|
||||||
(myself->getsigmask () & SIGTOMASK (sig));
|
(_main_tls->sigmask & SIGTOMASK (sig));
|
||||||
|
|
||||||
if (pgid_gone)
|
if (pgid_gone)
|
||||||
goto setEIO;
|
goto setEIO;
|
||||||
|
@ -62,8 +62,6 @@ details. */
|
|||||||
/* Every version of cygwin <= this uses an old, incorrect method
|
/* Every version of cygwin <= this uses an old, incorrect method
|
||||||
to determine signal masks. */
|
to determine signal masks. */
|
||||||
|
|
||||||
#define CYGWIN_VERSION_DLL_BAD_SIGNAL_MASK 19005
|
|
||||||
|
|
||||||
#define CYGWIN_VERSION_USER_API_VERSION_COMBINED \
|
#define CYGWIN_VERSION_USER_API_VERSION_COMBINED \
|
||||||
CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor)
|
CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor)
|
||||||
|
|
||||||
|
@ -30,9 +30,7 @@ details. */
|
|||||||
#include <sys/cygwin.h>
|
#include <sys/cygwin.h>
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
* write_record: Translates a Windows DNS record into a compressed record
|
||||||
write_record: Translates a Windows DNS record into a compressed record
|
|
||||||
|
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
#define PUTDOMAIN(d,p)\
|
#define PUTDOMAIN(d,p)\
|
||||||
|
@ -608,9 +608,7 @@ int res_mkquery (int op, const char * dnameptr, int qclass, int qtype,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
*
|
* res_query()
|
||||||
res_query()
|
|
||||||
|
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
int res_nquery( res_state statp, const char * DomName, int Class, int Type,
|
int res_nquery( res_state statp, const char * DomName, int Class, int Type,
|
||||||
@ -640,9 +638,7 @@ int res_query( const char * DomName, int Class, int Type, unsigned char * AnsPtr
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
*
|
* res_querydomain()
|
||||||
res_querydomain()
|
|
||||||
|
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
int res_nquerydomain( res_state statp, const char * Name, const char * DomName,
|
int res_nquerydomain( res_state statp, const char * Name, const char * DomName,
|
||||||
int Class, int Type, unsigned char * AnsPtr, int AnsLength)
|
int Class, int Type, unsigned char * AnsPtr, int AnsLength)
|
||||||
@ -746,9 +742,7 @@ int res_search( const char * DomName, int Class, int Type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
*
|
* dn_expand
|
||||||
dn_expand
|
|
||||||
|
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
int dn_expand(const unsigned char *msg, const unsigned char *eomorig,
|
int dn_expand(const unsigned char *msg, const unsigned char *eomorig,
|
||||||
|
@ -3313,10 +3313,7 @@ symlink_info::check_sysfile (HANDLE h)
|
|||||||
set_error (EIO);
|
set_error (EIO);
|
||||||
}
|
}
|
||||||
else if (io.Information > SYMLINK_MAX + 1)
|
else if (io.Information > SYMLINK_MAX + 1)
|
||||||
{
|
|
||||||
debug_printf ("symlink string too long");
|
debug_printf ("symlink string too long");
|
||||||
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
res = posixify (srcbuf);
|
res = posixify (srcbuf);
|
||||||
}
|
}
|
||||||
|
@ -96,16 +96,6 @@ public:
|
|||||||
|
|
||||||
inline void set_has_pgid_children (bool val) {has_pgid_children = val;}
|
inline void set_has_pgid_children (bool val) {has_pgid_children = val;}
|
||||||
|
|
||||||
inline sigset_t& getsigmask ()
|
|
||||||
{
|
|
||||||
return sig_mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void setsigmask (sigset_t mask)
|
|
||||||
{
|
|
||||||
sig_mask = mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
commune_result commune_request (__uint32_t, ...);
|
commune_result commune_request (__uint32_t, ...);
|
||||||
bool alive ();
|
bool alive ();
|
||||||
fhandler_pipe *pipe_fhandler (HANDLE, size_t &);
|
fhandler_pipe *pipe_fhandler (HANDLE, size_t &);
|
||||||
@ -128,8 +118,6 @@ public:
|
|||||||
HANDLE sendsig;
|
HANDLE sendsig;
|
||||||
HANDLE exec_sendsig;
|
HANDLE exec_sendsig;
|
||||||
DWORD exec_dwProcessId;
|
DWORD exec_dwProcessId;
|
||||||
private:
|
|
||||||
sigset_t sig_mask;
|
|
||||||
public:
|
public:
|
||||||
HANDLE wr_proc_pipe;
|
HANDLE wr_proc_pipe;
|
||||||
DWORD wr_proc_pipe_owner;
|
DWORD wr_proc_pipe_owner;
|
||||||
|
@ -115,7 +115,6 @@ pipe_handler (LPVOID in_ps)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pipesync::pipesync (HANDLE f, DWORD is_reader):
|
pipesync::pipesync (HANDLE f, DWORD is_reader):
|
||||||
reader (false), ret_handle (NULL)
|
reader (false), ret_handle (NULL)
|
||||||
{
|
{
|
||||||
|
@ -221,7 +221,6 @@ get_registry_hive_path (const PWCHAR name, PWCHAR path)
|
|||||||
if (!RegOpenKeyExW (HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hkey))
|
if (!RegOpenKeyExW (HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hkey))
|
||||||
{
|
{
|
||||||
WCHAR buf[NT_MAX_PATH];
|
WCHAR buf[NT_MAX_PATH];
|
||||||
WCHAR tmp[NT_MAX_PATH];
|
|
||||||
DWORD type, siz;
|
DWORD type, siz;
|
||||||
|
|
||||||
path[0] = L'\0';
|
path[0] = L'\0';
|
||||||
|
@ -160,7 +160,7 @@ pselect(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|||||||
const struct timespec *ts, const sigset_t *set)
|
const struct timespec *ts, const sigset_t *set)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
sigset_t oldset = myself->getsigmask ();
|
sigset_t oldset = _my_tls.sigmask;
|
||||||
|
|
||||||
myfault efault;
|
myfault efault;
|
||||||
if (efault.faulted (EFAULT))
|
if (efault.faulted (EFAULT))
|
||||||
@ -171,11 +171,11 @@ pselect(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|||||||
tv.tv_usec = ts->tv_nsec / 1000;
|
tv.tv_usec = ts->tv_nsec / 1000;
|
||||||
}
|
}
|
||||||
if (set)
|
if (set)
|
||||||
set_signal_mask (*set, myself->getsigmask ());
|
set_signal_mask (*set, _my_tls.sigmask);
|
||||||
int ret = cygwin_select (maxfds, readfds, writefds, exceptfds,
|
int ret = cygwin_select (maxfds, readfds, writefds, exceptfds,
|
||||||
ts ? &tv : NULL);
|
ts ? &tv : NULL);
|
||||||
if (set)
|
if (set)
|
||||||
set_signal_mask (oldset, myself->getsigmask ());
|
set_signal_mask (oldset, _my_tls.sigmask);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ usleep (useconds_t useconds)
|
|||||||
extern "C" int
|
extern "C" int
|
||||||
sigprocmask (int how, const sigset_t *set, sigset_t *oldset)
|
sigprocmask (int how, const sigset_t *set, sigset_t *oldset)
|
||||||
{
|
{
|
||||||
return handle_sigprocmask (how, set, oldset, myself->getsigmask ());
|
return handle_sigprocmask (how, set, oldset, _my_tls.sigmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __stdcall
|
int __stdcall
|
||||||
@ -342,7 +342,7 @@ abort (void)
|
|||||||
sigset_t sig_mask;
|
sigset_t sig_mask;
|
||||||
sigfillset (&sig_mask);
|
sigfillset (&sig_mask);
|
||||||
sigdelset (&sig_mask, SIGABRT);
|
sigdelset (&sig_mask, SIGABRT);
|
||||||
set_signal_mask (sig_mask, myself->getsigmask ());
|
set_signal_mask (sig_mask, _my_tls.sigmask);
|
||||||
|
|
||||||
raise (SIGABRT);
|
raise (SIGABRT);
|
||||||
_my_tls.call_signal_handler (); /* Call any signal handler */
|
_my_tls.call_signal_handler (); /* Call any signal handler */
|
||||||
@ -485,7 +485,7 @@ sigpause (int signal_mask)
|
|||||||
extern "C" int
|
extern "C" int
|
||||||
pause (void)
|
pause (void)
|
||||||
{
|
{
|
||||||
return handle_sigsuspend (myself->getsigmask ());
|
return handle_sigsuspend (_my_tls.sigmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
|
@ -663,7 +663,7 @@ sig_send (_pinfo *p, siginfo_t& si, _cygtls *tls)
|
|||||||
else if (si.si_signo == __SIGPENDING)
|
else if (si.si_signo == __SIGPENDING)
|
||||||
pack.mask = &pending;
|
pack.mask = &pending;
|
||||||
else if (si.si_signo == __SIGFLUSH || si.si_signo > 0)
|
else if (si.si_signo == __SIGFLUSH || si.si_signo > 0)
|
||||||
pack.mask = &myself->getsigmask ();
|
pack.mask = &_my_tls.sigmask;
|
||||||
else
|
else
|
||||||
pack.mask = NULL;
|
pack.mask = NULL;
|
||||||
|
|
||||||
@ -1118,7 +1118,7 @@ pending_signals::add (sigpacket& pack)
|
|||||||
return;
|
return;
|
||||||
se = sigs + pack.si.si_signo;
|
se = sigs + pack.si.si_signo;
|
||||||
*se = pack;
|
*se = pack;
|
||||||
se->mask = &myself->getsigmask ();
|
se->mask = &pack.tls->sigmask;
|
||||||
se->next = NULL;
|
se->next = NULL;
|
||||||
if (end)
|
if (end)
|
||||||
end->next = se;
|
end->next = se;
|
||||||
@ -1199,7 +1199,7 @@ wait_sig (VOID *)
|
|||||||
sigset_t dummy_mask;
|
sigset_t dummy_mask;
|
||||||
if (!pack.mask)
|
if (!pack.mask)
|
||||||
{
|
{
|
||||||
dummy_mask = myself->getsigmask ();
|
dummy_mask = _main_tls->sigmask;
|
||||||
pack.mask = &dummy_mask;
|
pack.mask = &dummy_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1218,7 +1218,7 @@ wait_sig (VOID *)
|
|||||||
unsigned bit;
|
unsigned bit;
|
||||||
sigq.reset ();
|
sigq.reset ();
|
||||||
while ((q = sigq.next ()))
|
while ((q = sigq.next ()))
|
||||||
if (myself->getsigmask () & (bit = SIGTOMASK (q->si.si_signo)))
|
if (pack.tls->sigmask & (bit = SIGTOMASK (q->si.si_signo)))
|
||||||
*pack.mask |= bit;
|
*pack.mask |= bit;
|
||||||
break;
|
break;
|
||||||
case __SIGHOLD:
|
case __SIGHOLD:
|
||||||
|
@ -376,6 +376,7 @@ pthread::pthread ():verifyable_object (PTHREAD_MAGIC), win32_obj_id (0),
|
|||||||
{
|
{
|
||||||
if (this != pthread_null::get_null_pthread ())
|
if (this != pthread_null::get_null_pthread ())
|
||||||
threads.insert (this);
|
threads.insert (this);
|
||||||
|
parent_tls = &_my_tls;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread::~pthread ()
|
pthread::~pthread ()
|
||||||
@ -1738,6 +1739,7 @@ pthread::thread_init_wrapper (void *arg)
|
|||||||
// if thread is detached force cleanup on exit
|
// if thread is detached force cleanup on exit
|
||||||
if (thread->attr.joinable == PTHREAD_CREATE_DETACHED && thread->joiner == NULL)
|
if (thread->attr.joinable == PTHREAD_CREATE_DETACHED && thread->joiner == NULL)
|
||||||
thread->joiner = thread;
|
thread->joiner = thread;
|
||||||
|
_my_tls.sigmask = thread->parent_tls->sigmask;
|
||||||
thread->mutex.unlock ();
|
thread->mutex.unlock ();
|
||||||
|
|
||||||
thread_printf ("started thread %p %p %p %p %p %p", arg, &_my_tls.local_clib,
|
thread_printf ("started thread %p %p %p %p %p %p", arg, &_my_tls.local_clib,
|
||||||
|
@ -434,6 +434,7 @@ private:
|
|||||||
DWORD thread_id;
|
DWORD thread_id;
|
||||||
__pthread_cleanup_handler *cleanup_stack;
|
__pthread_cleanup_handler *cleanup_stack;
|
||||||
pthread_mutex mutex;
|
pthread_mutex mutex;
|
||||||
|
_cygtls *parent_tls;
|
||||||
|
|
||||||
void suspend_except_self ();
|
void suspend_except_self ();
|
||||||
void resume ();
|
void resume ();
|
||||||
|
@ -179,8 +179,7 @@ extern HANDLE tty_mutex;
|
|||||||
})
|
})
|
||||||
|
|
||||||
/* Convert a signal to a signal mask */
|
/* Convert a signal to a signal mask */
|
||||||
#define SIGTOMASK(sig) (1 << ((sig) - signal_shift_subtract))
|
#define SIGTOMASK(sig) (1 << ((sig) - 1))
|
||||||
extern unsigned int signal_shift_subtract;
|
|
||||||
|
|
||||||
extern int __api_fatal_exit_val;
|
extern int __api_fatal_exit_val;
|
||||||
#define set_api_fatal_return(n) do {extern int __api_fatal_exit_val; __api_fatal_exit_val = (n);} while (0)
|
#define set_api_fatal_return(n) do {extern int __api_fatal_exit_val; __api_fatal_exit_val = (n);} while (0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user