diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2011-05-01 17:42:41 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2011-05-01 17:42:41 +0000 |
commit | a91ac4dca9f8edca7945593509267beff5a504fe (patch) | |
tree | ab305094a97533163362a0efcdb93ac9df1b8270 | |
parent | 1112b2c38f39f33daefd03bb1eebe9e1f84eabaf (diff) | |
download | cygnal-a91ac4dca9f8edca7945593509267beff5a504fe.tar.gz cygnal-a91ac4dca9f8edca7945593509267beff5a504fe.tar.bz2 cygnal-a91ac4dca9f8edca7945593509267beff5a504fe.zip |
* fhandler_windows.cc (fhandler_windows::read): Use
pthread::get_cancel_event to fetch thread's cancel event.
* flock.cc (lf_setlock): Ditto.
* posix_ipc.cc (ipc_cond_timedwait): Ditto.
* thread.cc (pthread::get_cancel_event): New static method.
* thread.h (pthread::get_cancel_event): Declare.
-rw-r--r-- | winsup/cygwin/ChangeLog | 9 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_windows.cc | 6 | ||||
-rw-r--r-- | winsup/cygwin/flock.cc | 5 | ||||
-rw-r--r-- | winsup/cygwin/posix_ipc.cc | 7 | ||||
-rw-r--r-- | winsup/cygwin/thread.cc | 13 | ||||
-rw-r--r-- | winsup/cygwin/thread.h | 1 |
6 files changed, 28 insertions, 13 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 338ddbc0f..989437a0b 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,14 @@ 2011-05-01 Corinna Vinschen <corinna@vinschen.de> + * fhandler_windows.cc (fhandler_windows::read): Use + pthread::get_cancel_event to fetch thread's cancel event. + * flock.cc (lf_setlock): Ditto. + * posix_ipc.cc (ipc_cond_timedwait): Ditto. + * thread.cc (pthread::get_cancel_event): New static method. + * thread.h (pthread::get_cancel_event): Declare. + +2011-05-01 Corinna Vinschen <corinna@vinschen.de> + * libc/minires-os-if.c (get_dns_info): Remove unnecessary test for existence of DnsQuery_A. diff --git a/winsup/cygwin/fhandler_windows.cc b/winsup/cygwin/fhandler_windows.cc index 119266093..d4c39d4c0 100644 --- a/winsup/cygwin/fhandler_windows.cc +++ b/winsup/cygwin/fhandler_windows.cc @@ -98,10 +98,8 @@ fhandler_windows::read (void *buf, size_t& len) HANDLE w4[3] = { get_handle (), signal_arrived, NULL }; DWORD cnt = 2; - pthread_t thread = pthread::self (); - if (thread && thread->cancel_event - && thread->cancelstate != PTHREAD_CANCEL_DISABLE) - w4[cnt++] = thread->cancel_event; + if ((w4[cnt] = pthread::get_cancel_event ()) != NULL) + ++cnt; restart: switch (MsgWaitForMultipleObjectsEx (cnt, w4, is_nonblocking () ? 0 : INFINITE, diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc index b4ef9e6a9..426b1044f 100644 --- a/winsup/cygwin/flock.cc +++ b/winsup/cygwin/flock.cc @@ -958,10 +958,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl) return EDEADLK; } - pthread_t thread = pthread::self (); - HANDLE cancel_event = (thread && thread->cancel_event - && thread->cancelstate != PTHREAD_CANCEL_DISABLE) - ? thread->cancel_event : NULL; + HANDLE cancel_event = pthread::get_cancel_event (); int wait_count = 0; /* The lock is always the first object. */ diff --git a/winsup/cygwin/posix_ipc.cc b/winsup/cygwin/posix_ipc.cc index ec6b6c76a..9f98e9d10 100644 --- a/winsup/cygwin/posix_ipc.cc +++ b/winsup/cygwin/posix_ipc.cc @@ -174,16 +174,13 @@ ipc_cond_init (HANDLE *pevt, const char *name, char sr) static int ipc_cond_timedwait (HANDLE evt, HANDLE mtx, const struct timespec *abstime) { - pthread_t thread; HANDLE w4[4] = { evt, signal_arrived, NULL, NULL }; DWORD cnt = 2; DWORD timer_idx = 0; int ret = 0; - thread = pthread::self (); - if (thread && thread->cancel_event - && thread->cancelstate != PTHREAD_CANCEL_DISABLE) - w4[cnt++] = thread->cancel_event; + if ((w4[cnt] = pthread::get_cancel_event ()) != NULL) + ++cnt; if (abstime) { if (abstime->tv_sec < 0 diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index b4a9b2982..3de53f6fa 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -885,6 +885,19 @@ pthread::testcancel () } } +/* Return cancel event handle if it exists *and* cancel is not disabled. + This function is supposed to be used from other functions which are + cancelable and need the cancel event in a WFMO call. */ +HANDLE +pthread::get_cancel_event () +{ + pthread_t thread = pthread::self (); + + return (thread && thread->cancel_event + && thread->cancelstate != PTHREAD_CANCEL_DISABLE) + ? thread->cancel_event : NULL; +} + void pthread::static_cancel_self () { diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h index 2453630f8..4ffbc4c01 100644 --- a/winsup/cygwin/thread.h +++ b/winsup/cygwin/thread.h @@ -399,6 +399,7 @@ public: virtual int cancel (); virtual void testcancel (); + static HANDLE get_cancel_event (); static void static_cancel_self (); virtual int setcancelstate (int state, int *oldstate); |