diff options
author | Christopher Faylor <me@cgf.cx> | 2004-11-16 15:16:57 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2004-11-16 15:16:57 +0000 |
commit | 6b82a1611b920461f612aece24d77fd8c1b6c281 (patch) | |
tree | c4864a22741185d1750999449868272a0e5d8685 | |
parent | 8a18cb9319d0d6f2b62883b2d1a11fbb50c11f23 (diff) | |
download | newlib-6b82a1611b920461f612aece24d77fd8c1b6c281.zip newlib-6b82a1611b920461f612aece24d77fd8c1b6c281.tar.gz newlib-6b82a1611b920461f612aece24d77fd8c1b6c281.tar.bz2 |
Use cygthread. Add release mechanism to cygthread so that it can be
used by threads which detach themselves.
-rw-r--r-- | winsup/cygwin/cygthread.cc | 6 | ||||
-rw-r--r-- | winsup/cygwin/cygthread.h | 5 | ||||
-rw-r--r-- | winsup/cygwin/cygtls.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/cygtls.h | 3 | ||||
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/exceptions.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/external.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_console.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/init.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/pinfo.cc | 5 | ||||
-rw-r--r-- | winsup/cygwin/select.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/sigproc.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/timer.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/times.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/tlsoffsets.h | 114 | ||||
-rw-r--r-- | winsup/cygwin/window.cc | 1 |
16 files changed, 73 insertions, 71 deletions
diff --git a/winsup/cygwin/cygthread.cc b/winsup/cygwin/cygthread.cc index e3f3fdc..1c7fc5c 100644 --- a/winsup/cygwin/cygthread.cc +++ b/winsup/cygwin/cygthread.cc @@ -11,7 +11,6 @@ details. */ #include <stdlib.h> #include "exceptions.h" #include "security.h" -#include "cygthread.h" #include "sync.h" #include "cygerrno.h" #include "sigproc.h" @@ -33,6 +32,7 @@ DWORD WINAPI cygthread::stub (VOID *arg) { cygthread *info = (cygthread *) arg; + _my_tls._ctinfo = info; if (info->arg == cygself) { if (info->ev) @@ -69,7 +69,8 @@ cygthread::stub (VOID *arg) info->func = NULL; // catch erroneous activation #endif info->__name = NULL; - SetEvent (info->ev); + if (info->inuse) + SetEvent (info->ev); } switch (WaitForSingleObject (info->thread_sync, INFINITE)) { @@ -88,6 +89,7 @@ DWORD WINAPI cygthread::simplestub (VOID *arg) { cygthread *info = (cygthread *) arg; + _my_tls._ctinfo = info; info->stack_ptr = &arg; info->ev = info->h; info->func (info->arg == cygself ? info : info->arg); diff --git a/winsup/cygwin/cygthread.h b/winsup/cygwin/cygthread.h index ff174c9..c97a482 100644 --- a/winsup/cygwin/cygthread.h +++ b/winsup/cygwin/cygthread.h @@ -6,6 +6,9 @@ This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ +#ifndef _CYGTHREAD_H +#define _CYGTHREAD_H + class cygthread { LONG inuse; @@ -25,6 +28,7 @@ class cygthread static DWORD WINAPI simplestub (VOID *); static DWORD main_thread_id; static const char * name (DWORD = 0); + void release () { inuse = false; } cygthread (LPTHREAD_START_ROUTINE, LPVOID, const char *); cygthread () {}; static void init (); @@ -43,3 +47,4 @@ class cygthread }; #define cygself NULL +#endif /*_CYGTHREAD_H*/ diff --git a/winsup/cygwin/cygtls.cc b/winsup/cygwin/cygtls.cc index 6be3881..22db636 100644 --- a/winsup/cygwin/cygtls.cc +++ b/winsup/cygwin/cygtls.cc @@ -19,7 +19,6 @@ details. */ #include "fhandler.h" #include "dtable.h" #include "cygheap.h" -#include "cygthread.h" #include "pinfo.h" #include "sigproc.h" diff --git a/winsup/cygwin/cygtls.h b/winsup/cygwin/cygtls.h index 016bf8c..deff108 100644 --- a/winsup/cygwin/cygtls.h +++ b/winsup/cygwin/cygtls.h @@ -32,6 +32,8 @@ details. */ #define TLS_STACK_SIZE 256 +#include "cygthread.h" + #pragma pack(push,4) struct _local_storage { @@ -131,6 +133,7 @@ struct _cygtls char __dontuse[8 * ((sizeof(struct _reent) + 4) / 8)]; }; struct _local_storage locals; + class cygthread *_ctinfo; waitq wq; struct _cygtls *prev, *next; __stack_t *stackptr; diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index eabda1c..4f2381c 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -33,7 +33,6 @@ details. */ #include "shared_info.h" #include "cygwin_version.h" #include "dll_init.h" -#include "cygthread.h" #include "sync.h" #include "heap.h" diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 2ac1358..f3207c6 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -25,7 +25,6 @@ details. */ #include "shared_info.h" #include "perprocess.h" #include "security.h" -#include "cygthread.h" #define CALL_HANDLER_RETRY 20 diff --git a/winsup/cygwin/external.cc b/winsup/cygwin/external.cc index ab7a392..56ef0c6 100644 --- a/winsup/cygwin/external.cc +++ b/winsup/cygwin/external.cc @@ -25,7 +25,6 @@ details. */ #include "cygheap.h" #include "wincap.h" #include "heap.h" -#include "cygthread.h" #include "pwdgrp.h" #include "cygtls.h" diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index 81f495f..76b7911 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -28,7 +28,6 @@ details. */ #include "sigproc.h" #include "pinfo.h" #include "shared_info.h" -#include "cygthread.h" #include "cygtls.h" #define CONVERT_LIMIT 16384 diff --git a/winsup/cygwin/init.cc b/winsup/cygwin/init.cc index cc86870..7ba0dc3 100644 --- a/winsup/cygwin/init.cc +++ b/winsup/cygwin/init.cc @@ -12,7 +12,6 @@ details. */ #include <stdlib.h> #include "thread.h" #include "perprocess.h" -#include "cygthread.h" #include "cygtls.h" int NO_COPY dynamically_loaded; diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index f11e1c5..ef8bab2 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -27,7 +27,6 @@ details. */ #include <sys/wait.h> #include <ntdef.h> #include "ntdll.h" -#include "cygthread.h" #include "shared_info.h" #include "cygheap.h" #include "fhandler.h" @@ -685,7 +684,6 @@ proc_waiter (void *arg) si.si_uid = vchild->uid; - int proc_todo; switch (buf) { case 0: @@ -729,6 +727,7 @@ proc_waiter (void *arg) break; } sigproc_printf ("exiting wait thread for pid %d", pid); + _my_tls._ctinfo->release (); return 0; } @@ -754,7 +753,7 @@ pinfo::wait () CloseHandle (out); -#if 1 +#if 0 DWORD tid; HANDLE h = CreateThread (&sec_none_nih, 0, proc_waiter, this, 0, &tid); if (!h) diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index a0dc131..7117ccd 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -38,7 +38,6 @@ details. */ #include "sigproc.h" #include "perthread.h" #include "tty.h" -#include "cygthread.h" #include "ntdll.h" #include "cygtls.h" #include <asm/byteorder.h> diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 54a0389..fe2b8bf 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -28,7 +28,6 @@ details. */ #include "cygheap.h" #include "child_info_magic.h" #include "shared_info.h" -#include "cygthread.h" #include "cygtls.h" #include "sigproc.h" #include "perthread.h" diff --git a/winsup/cygwin/timer.cc b/winsup/cygwin/timer.cc index 8e836e9..e7ce45a 100644 --- a/winsup/cygwin/timer.cc +++ b/winsup/cygwin/timer.cc @@ -16,7 +16,6 @@ details. */ #include "hires.h" #include "thread.h" #include "cygtls.h" -#include "cygthread.h" #include "sigproc.h" #include "sync.h" diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc index 12eb821..a6fac1a 100644 --- a/winsup/cygwin/times.cc +++ b/winsup/cygwin/times.cc @@ -23,7 +23,6 @@ details. */ #include "pinfo.h" #include "hires.h" #include "cygtls.h" -#include "cygthread.h" #include "sigproc.h" #include "sync.h" diff --git a/winsup/cygwin/tlsoffsets.h b/winsup/cygwin/tlsoffsets.h index e6b955c..a99b38b 100644 --- a/winsup/cygwin/tlsoffsets.h +++ b/winsup/cygwin/tlsoffsets.h @@ -1,113 +1,117 @@ //;# autogenerated: Do not edit. -//; $tls::sizeof__cygtls = 3932; -//; $tls::func = -3932; +//; $tls::sizeof__cygtls = 3936; +//; $tls::func = -3936; //; $tls::pfunc = 0; -//; $tls::saved_errno = -3928; +//; $tls::saved_errno = -3932; //; $tls::psaved_errno = 4; -//; $tls::sa_flags = -3924; +//; $tls::sa_flags = -3928; //; $tls::psa_flags = 8; -//; $tls::oldmask = -3920; +//; $tls::oldmask = -3924; //; $tls::poldmask = 12; -//; $tls::deltamask = -3916; +//; $tls::deltamask = -3920; //; $tls::pdeltamask = 16; -//; $tls::event = -3912; +//; $tls::event = -3916; //; $tls::pevent = 20; -//; $tls::errno_addr = -3908; +//; $tls::errno_addr = -3912; //; $tls::perrno_addr = 24; -//; $tls::initialized = -3904; +//; $tls::initialized = -3908; //; $tls::pinitialized = 28; -//; $tls::sigmask = -3900; +//; $tls::sigmask = -3904; //; $tls::psigmask = 32; -//; $tls::sigwait_mask = -3896; +//; $tls::sigwait_mask = -3900; //; $tls::psigwait_mask = 36; -//; $tls::sigwait_info = -3892; +//; $tls::sigwait_info = -3896; //; $tls::psigwait_info = 40; -//; $tls::threadkill = -3888; +//; $tls::threadkill = -3892; //; $tls::pthreadkill = 44; -//; $tls::infodata = -3884; +//; $tls::infodata = -3888; //; $tls::pinfodata = 48; -//; $tls::tid = -3736; +//; $tls::tid = -3740; //; $tls::ptid = 196; -//; $tls::local_clib = -3732; +//; $tls::local_clib = -3736; //; $tls::plocal_clib = 200; -//; $tls::__dontuse = -3732; +//; $tls::__dontuse = -3736; //; $tls::p__dontuse = 200; -//; $tls::locals = -2668; +//; $tls::locals = -2672; //; $tls::plocals = 1264; +//; $tls::_ctinfo = -1084; +//; $tls::p_ctinfo = 2852; //; $tls::wq = -1080; -//; $tls::pwq = 2852; +//; $tls::pwq = 2856; //; $tls::prev = -1052; -//; $tls::pprev = 2880; +//; $tls::pprev = 2884; //; $tls::next = -1048; -//; $tls::pnext = 2884; +//; $tls::pnext = 2888; //; $tls::stackptr = -1044; -//; $tls::pstackptr = 2888; +//; $tls::pstackptr = 2892; //; $tls::sig = -1040; -//; $tls::psig = 2892; +//; $tls::psig = 2896; //; $tls::incyg = -1036; -//; $tls::pincyg = 2896; +//; $tls::pincyg = 2900; //; $tls::spinning = -1032; -//; $tls::pspinning = 2900; +//; $tls::pspinning = 2904; //; $tls::stacklock = -1028; -//; $tls::pstacklock = 2904; +//; $tls::pstacklock = 2908; //; $tls::stack = -1024; -//; $tls::pstack = 2908; +//; $tls::pstack = 2912; //; $tls::padding = 0; -//; $tls::ppadding = 3932; +//; $tls::ppadding = 3936; //; __DATA__ -#define tls_func (-3932) +#define tls_func (-3936) #define tls_pfunc (0) -#define tls_saved_errno (-3928) +#define tls_saved_errno (-3932) #define tls_psaved_errno (4) -#define tls_sa_flags (-3924) +#define tls_sa_flags (-3928) #define tls_psa_flags (8) -#define tls_oldmask (-3920) +#define tls_oldmask (-3924) #define tls_poldmask (12) -#define tls_deltamask (-3916) +#define tls_deltamask (-3920) #define tls_pdeltamask (16) -#define tls_event (-3912) +#define tls_event (-3916) #define tls_pevent (20) -#define tls_errno_addr (-3908) +#define tls_errno_addr (-3912) #define tls_perrno_addr (24) -#define tls_initialized (-3904) +#define tls_initialized (-3908) #define tls_pinitialized (28) -#define tls_sigmask (-3900) +#define tls_sigmask (-3904) #define tls_psigmask (32) -#define tls_sigwait_mask (-3896) +#define tls_sigwait_mask (-3900) #define tls_psigwait_mask (36) -#define tls_sigwait_info (-3892) +#define tls_sigwait_info (-3896) #define tls_psigwait_info (40) -#define tls_threadkill (-3888) +#define tls_threadkill (-3892) #define tls_pthreadkill (44) -#define tls_infodata (-3884) +#define tls_infodata (-3888) #define tls_pinfodata (48) -#define tls_tid (-3736) +#define tls_tid (-3740) #define tls_ptid (196) -#define tls_local_clib (-3732) +#define tls_local_clib (-3736) #define tls_plocal_clib (200) -#define tls___dontuse (-3732) +#define tls___dontuse (-3736) #define tls_p__dontuse (200) -#define tls_locals (-2668) +#define tls_locals (-2672) #define tls_plocals (1264) +#define tls__ctinfo (-1084) +#define tls_p_ctinfo (2852) #define tls_wq (-1080) -#define tls_pwq (2852) +#define tls_pwq (2856) #define tls_prev (-1052) -#define tls_pprev (2880) +#define tls_pprev (2884) #define tls_next (-1048) -#define tls_pnext (2884) +#define tls_pnext (2888) #define tls_stackptr (-1044) -#define tls_pstackptr (2888) +#define tls_pstackptr (2892) #define tls_sig (-1040) -#define tls_psig (2892) +#define tls_psig (2896) #define tls_incyg (-1036) -#define tls_pincyg (2896) +#define tls_pincyg (2900) #define tls_spinning (-1032) -#define tls_pspinning (2900) +#define tls_pspinning (2904) #define tls_stacklock (-1028) -#define tls_pstacklock (2904) +#define tls_pstacklock (2908) #define tls_stack (-1024) -#define tls_pstack (2908) +#define tls_pstack (2912) #define tls_padding (0) -#define tls_ppadding (3932) +#define tls_ppadding (3936) diff --git a/winsup/cygwin/window.cc b/winsup/cygwin/window.cc index a04f7c5..2c5fcce 100644 --- a/winsup/cygwin/window.cc +++ b/winsup/cygwin/window.cc @@ -23,7 +23,6 @@ details. */ #include "cygerrno.h" #include "perprocess.h" #include "security.h" -#include "cygthread.h" #include "thread.h" #include "cygtls.h" #include "sync.h" |