* bsd_helper.h: Throughout, convert "struct thread" to "class thread".
* bsd_mutex.cc (_msleep): Fetch signal_arrived handle from thread's ipcblk. * process.h (class process): Drop _signal_arrived and align methods. (process_cache::process): Drop signal_arrived parameter. * process.cc (process::process): Ditto. Drop related code. (process::~process): Drop closing signal_arrived handle. (process_cache::process): Drop signal_arrived parameter in call to process::process. (thread::dup_signal_arrived): New method duplicating thread's signal_arrived handle. (thread::close_signal_arrived): New method closing thread's signal_arrived handle. * msg.cc (client_request_msg::serve): Drop signal_arrived parameter from call to process_cache::process. Use thread constructor to initialize td. * sem.cc (client_request_sem::serve): Ditto. * shm.cc (client_request_shm::serve): Ditto.
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| /* process.cc | ||||
|  | ||||
|    Copyright 2001, 2002, 2003, 2004, 2005, 2014 Red Hat Inc. | ||||
|    Copyright 2001, 2002, 2003, 2004, 2005, 2014, 2015 Red Hat Inc. | ||||
|  | ||||
|    Written by Robert Collins <rbtcollins@hotmail.com> | ||||
|  | ||||
| @@ -20,6 +20,8 @@ details. */ | ||||
|  | ||||
| #include "process.h" | ||||
|  | ||||
| #include "cygserver_ipc.h" | ||||
|  | ||||
| /*****************************************************************************/ | ||||
|  | ||||
| #define elements(ARRAY) (sizeof (ARRAY) / sizeof (*ARRAY)) | ||||
| @@ -39,11 +41,10 @@ process_cleanup::process () | ||||
|  | ||||
| /*****************************************************************************/ | ||||
|  | ||||
| process::process (const pid_t cygpid, const DWORD winpid, HANDLE signal_arrived) | ||||
| process::process (const pid_t cygpid, const DWORD winpid) | ||||
|   : _cygpid (cygpid), | ||||
|     _winpid (winpid), | ||||
|     _hProcess (NULL), | ||||
|     _signal_arrived (INVALID_HANDLE_VALUE), | ||||
|     _cleaning_up (false), | ||||
|     _exit_status (STILL_ACTIVE), | ||||
|     _routines_head (NULL), | ||||
| @@ -60,19 +61,6 @@ process::process (const pid_t cygpid, const DWORD winpid, HANDLE signal_arrived) | ||||
|   else | ||||
|     debug_printf ("got handle %p for new cache process %d(%u)", | ||||
| 		  _hProcess, _cygpid, _winpid); | ||||
|   if (!signal_arrived) | ||||
|     debug_printf ("signal_arrived NULL for process %d(%u)", _cygpid, _winpid); | ||||
|   else if (signal_arrived != INVALID_HANDLE_VALUE) | ||||
|     { | ||||
|       if (!DuplicateHandle (_hProcess, signal_arrived, | ||||
| 			    GetCurrentProcess (), &_signal_arrived, | ||||
| 			    0, FALSE, DUPLICATE_SAME_ACCESS)) | ||||
| 	{ | ||||
| 	  system_printf ("error getting signal_arrived to server (%u)", | ||||
| 			 GetLastError ()); | ||||
| 	  _signal_arrived = INVALID_HANDLE_VALUE; | ||||
| 	} | ||||
|     } | ||||
|   InitializeCriticalSection (&_access); | ||||
|   debug ("initialized (%u)", _cygpid); | ||||
| } | ||||
| @@ -81,8 +69,6 @@ process::~process () | ||||
| { | ||||
|   debug ("deleting (%u)", _cygpid); | ||||
|   DeleteCriticalSection (&_access); | ||||
|   if (_signal_arrived && _signal_arrived != INVALID_HANDLE_VALUE) | ||||
|     CloseHandle (_signal_arrived); | ||||
|   CloseHandle (_hProcess); | ||||
| } | ||||
|  | ||||
| @@ -239,8 +225,7 @@ process_cache::~process_cache () | ||||
|  * have been deleted once it has been unlocked. | ||||
|  */ | ||||
| class process * | ||||
| process_cache::process (const pid_t cygpid, const DWORD winpid, | ||||
| 			HANDLE signal_arrived) | ||||
| process_cache::process (const pid_t cygpid, const DWORD winpid) | ||||
| { | ||||
|   /* TODO: make this more granular, so a search doesn't involve the | ||||
|    * write lock. | ||||
| @@ -260,7 +245,7 @@ process_cache::process (const pid_t cygpid, const DWORD winpid, | ||||
| 	  return NULL; | ||||
| 	} | ||||
|  | ||||
|       entry = new class process (cygpid, winpid, signal_arrived); | ||||
|       entry = new class process (cygpid, winpid); | ||||
|       if (!entry->is_active ()) | ||||
| 	{ | ||||
| 	  LeaveCriticalSection (&_cache_write_access); | ||||
| @@ -495,5 +480,26 @@ process_cache::find (const DWORD winpid, class process **previous) | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| void | ||||
| thread::dup_signal_arrived () | ||||
| { | ||||
|   if (ipcblk && ipcblk->signal_arrived | ||||
|       && !DuplicateHandle (client->handle (), ipcblk->signal_arrived, | ||||
| 			   GetCurrentProcess (), &ipcblk->signal_arrived, | ||||
| 			   0, FALSE, DUPLICATE_SAME_ACCESS)) | ||||
|       { | ||||
| 	system_printf ("error duplicating thread's signal_arrived " | ||||
| 		       "to server (%u)", GetLastError ()); | ||||
| 	ipcblk->signal_arrived = NULL; | ||||
|       } | ||||
| } | ||||
|  | ||||
| void | ||||
| thread::close_signal_arrived () | ||||
| { | ||||
|   if (ipcblk && ipcblk->signal_arrived) | ||||
|     CloseHandle (ipcblk->signal_arrived); | ||||
| } | ||||
|  | ||||
| /*****************************************************************************/ | ||||
| #endif /* __OUTSIDE_CYGWIN__ */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user