* pinfo.h (_pinfo::getthread2signal): Remove obsolete function.
* cygtls.h (_threadinfo): Define tid more precisely. (_threadinfo::operator HANDLE): Define. * exceptions.cc (_threadinfo::interupt_now): Use _threadinfo HANDLE operator to derive thread handle. (setup_handler): Ditto. * sigproc.cc: Reorganize includes.
This commit is contained in:
		| @@ -1,3 +1,13 @@ | ||||
| 2003-11-28  Christopher Faylor  <cgf@redhat.com> | ||||
|  | ||||
| 	* pinfo.h (_pinfo::getthread2signal): Remove obsolete function. | ||||
| 	* cygtls.h (_threadinfo): Define tid more precisely. | ||||
| 	(_threadinfo::operator HANDLE): Define. | ||||
| 	* exceptions.cc (_threadinfo::interupt_now): Use _threadinfo HANDLE | ||||
| 	operator to derive thread handle. | ||||
| 	(setup_handler): Ditto. | ||||
| 	* sigproc.cc: Reorganize includes. | ||||
|  | ||||
| 2003-11-28  Christopher Faylor  <cgf@redhat.com> | ||||
|  | ||||
| 	* pinfo.h (_pinfo::getsig): Remove obsolete function, here and | ||||
|   | ||||
| @@ -34,7 +34,7 @@ struct _threadinfo | ||||
|   sigset_t sigwait_mask; | ||||
|   siginfo_t *sigwait_info; | ||||
|   siginfo_t infodata; | ||||
|   void *tid; | ||||
|   struct pthread *tid; | ||||
|   struct _threadinfo *prev, *next; | ||||
|   __stack_t stack[8]; | ||||
|   int sig; | ||||
| @@ -51,6 +51,7 @@ struct _threadinfo | ||||
|     __attribute__((regparm(3))); | ||||
|   void __stdcall interrupt_setup (int sig, void *handler, struct sigaction& siga, __stack_t retaddr) | ||||
|     __attribute__((regparm(3))); | ||||
|   operator HANDLE () const {return tid->win32_obj_id;} | ||||
| }; | ||||
| #pragma pack(pop) | ||||
|  | ||||
|   | ||||
| @@ -745,7 +745,7 @@ _threadinfo::interrupt_now (CONTEXT *ctx, int sig, void *handler, | ||||
|   push (0); | ||||
|   interrupt_setup (sig, handler, siga, (__stack_t) ctx->Eip); | ||||
|   ctx->Eip = (DWORD) sigdelayed; | ||||
|   SetThreadContext (myself->getthread2signal (), ctx); /* Restart the thread in a new location */ | ||||
|   SetThreadContext (*this, ctx); /* Restart the thread in a new location */ | ||||
|   return 1; | ||||
| } | ||||
|  | ||||
| @@ -801,7 +801,7 @@ setup_handler (int sig, void *handler, struct sigaction& siga, _threadinfo *tls) | ||||
| 	} | ||||
|  | ||||
|       DWORD res; | ||||
|       HANDLE hth = myself->getthread2signal (); | ||||
|       HANDLE hth = (HANDLE) *tls; | ||||
|  | ||||
|       /* Suspend the thread which will receive the signal.  But first ensure that | ||||
| 	 this thread doesn't have any mutos.  (FIXME: Someday we should just grab | ||||
|   | ||||
| @@ -6,17 +6,11 @@ On process startup, cygwin starts a secondary thread that deals with signals. | ||||
| This thread contains a loop which blocks waiting for information to show up | ||||
| on a pipe whose handle (sendsig) is currently stored in _pinfo (this may change). | ||||
|  | ||||
| If one of these is activated, then the the signal handler inspects an | ||||
| array of integers looking for a non-zero value.  The array corresponds | ||||
| to the normal UNIX signals + two extra locations for internal usage. | ||||
| This array is located in the 'sigtodo' array in the procinfo class. | ||||
|  | ||||
| The signal thread uses the InterlockedDecrement function to atomically | ||||
| inspect elements of the array.  If one one of the elements of the array | ||||
| is non-zero, then cygwin checks to see if the user has blocked the | ||||
| signal by inspecting the process signal mask.  If the signal is blocked, | ||||
| then the current array element is reincremented and the next element is | ||||
| checked. | ||||
| Communication on the sendsig pipe is via the 'sigelem' structure.  This | ||||
| structure is filled out by the sig_send function with information about the | ||||
| signal being sent, such as (as of this writing) the signal number, the | ||||
| originating pid, the originating thread, and the address of the mask to | ||||
| use (this may change). | ||||
|  | ||||
| If the signal is not blocked, then the function "sig_handle" is called | ||||
| with the signal number as an argument.  This is a fairly straightforward | ||||
|   | ||||
| @@ -114,11 +114,6 @@ public: | ||||
|     sig_mask = mask; | ||||
|   } | ||||
|  | ||||
|   inline HANDLE getthread2signal () | ||||
|   { | ||||
|     return hMainThread; | ||||
|   } | ||||
|  | ||||
|   void commune_recv (); | ||||
|   commune_result commune_send (DWORD, ...); | ||||
|   bool alive (); | ||||
|   | ||||
| @@ -20,8 +20,6 @@ details. */ | ||||
| #include <sys/signal.h> | ||||
| #include "cygerrno.h" | ||||
| #include "sync.h" | ||||
| #include "cygtls.h" | ||||
| #include "sigproc.h" | ||||
| #include "pinfo.h" | ||||
| #include "security.h" | ||||
| #include "path.h" | ||||
| @@ -29,9 +27,11 @@ details. */ | ||||
| #include "dtable.h" | ||||
| #include "cygheap.h" | ||||
| #include "child_info_magic.h" | ||||
| #include "perthread.h" | ||||
| #include "shared_info.h" | ||||
| #include "cygthread.h" | ||||
| #include "cygtls.h" | ||||
| #include "sigproc.h" | ||||
| #include "perthread.h" | ||||
|  | ||||
| /* | ||||
|  * Convenience defines | ||||
|   | ||||
		Reference in New Issue
	
	Block a user