diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2015-01-19 17:42:38 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2015-01-19 17:42:38 +0000 |
commit | 8d8f40361f1d0e135f6679a00b19a0e1808df085 (patch) | |
tree | 49b3d6b790156e9c3ba6fd0e634940ddc6eb27d7 /winsup/cygserver/process.cc | |
parent | c95ce0216000cb8fb85d666adc79ed62b126d2ec (diff) | |
download | cygnal-8d8f40361f1d0e135f6679a00b19a0e1808df085.tar.gz cygnal-8d8f40361f1d0e135f6679a00b19a0e1808df085.tar.bz2 cygnal-8d8f40361f1d0e135f6679a00b19a0e1808df085.zip |
* 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.
Diffstat (limited to 'winsup/cygserver/process.cc')
-rw-r--r-- | winsup/cygserver/process.cc | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/winsup/cygserver/process.cc b/winsup/cygserver/process.cc index 12989a8d4..d78ca3715 100644 --- a/winsup/cygserver/process.cc +++ b/winsup/cygserver/process.cc @@ -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__ */ |