* 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.
This commit is contained in:
parent
1112b2c38f
commit
a91ac4dca9
|
@ -1,3 +1,12 @@
|
||||||
|
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>
|
2011-05-01 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* libc/minires-os-if.c (get_dns_info): Remove unnecessary test for
|
* libc/minires-os-if.c (get_dns_info): Remove unnecessary test for
|
||||||
|
|
|
@ -98,10 +98,8 @@ fhandler_windows::read (void *buf, size_t& len)
|
||||||
|
|
||||||
HANDLE w4[3] = { get_handle (), signal_arrived, NULL };
|
HANDLE w4[3] = { get_handle (), signal_arrived, NULL };
|
||||||
DWORD cnt = 2;
|
DWORD cnt = 2;
|
||||||
pthread_t thread = pthread::self ();
|
if ((w4[cnt] = pthread::get_cancel_event ()) != NULL)
|
||||||
if (thread && thread->cancel_event
|
++cnt;
|
||||||
&& thread->cancelstate != PTHREAD_CANCEL_DISABLE)
|
|
||||||
w4[cnt++] = thread->cancel_event;
|
|
||||||
restart:
|
restart:
|
||||||
switch (MsgWaitForMultipleObjectsEx (cnt, w4,
|
switch (MsgWaitForMultipleObjectsEx (cnt, w4,
|
||||||
is_nonblocking () ? 0 : INFINITE,
|
is_nonblocking () ? 0 : INFINITE,
|
||||||
|
|
|
@ -958,10 +958,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
|
||||||
return EDEADLK;
|
return EDEADLK;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_t thread = pthread::self ();
|
HANDLE cancel_event = pthread::get_cancel_event ();
|
||||||
HANDLE cancel_event = (thread && thread->cancel_event
|
|
||||||
&& thread->cancelstate != PTHREAD_CANCEL_DISABLE)
|
|
||||||
? thread->cancel_event : NULL;
|
|
||||||
|
|
||||||
int wait_count = 0;
|
int wait_count = 0;
|
||||||
/* The lock is always the first object. */
|
/* The lock is always the first object. */
|
||||||
|
|
|
@ -174,16 +174,13 @@ ipc_cond_init (HANDLE *pevt, const char *name, char sr)
|
||||||
static int
|
static int
|
||||||
ipc_cond_timedwait (HANDLE evt, HANDLE mtx, const struct timespec *abstime)
|
ipc_cond_timedwait (HANDLE evt, HANDLE mtx, const struct timespec *abstime)
|
||||||
{
|
{
|
||||||
pthread_t thread;
|
|
||||||
HANDLE w4[4] = { evt, signal_arrived, NULL, NULL };
|
HANDLE w4[4] = { evt, signal_arrived, NULL, NULL };
|
||||||
DWORD cnt = 2;
|
DWORD cnt = 2;
|
||||||
DWORD timer_idx = 0;
|
DWORD timer_idx = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
thread = pthread::self ();
|
if ((w4[cnt] = pthread::get_cancel_event ()) != NULL)
|
||||||
if (thread && thread->cancel_event
|
++cnt;
|
||||||
&& thread->cancelstate != PTHREAD_CANCEL_DISABLE)
|
|
||||||
w4[cnt++] = thread->cancel_event;
|
|
||||||
if (abstime)
|
if (abstime)
|
||||||
{
|
{
|
||||||
if (abstime->tv_sec < 0
|
if (abstime->tv_sec < 0
|
||||||
|
|
|
@ -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
|
void
|
||||||
pthread::static_cancel_self ()
|
pthread::static_cancel_self ()
|
||||||
{
|
{
|
||||||
|
|
|
@ -399,6 +399,7 @@ public:
|
||||||
virtual int cancel ();
|
virtual int cancel ();
|
||||||
|
|
||||||
virtual void testcancel ();
|
virtual void testcancel ();
|
||||||
|
static HANDLE get_cancel_event ();
|
||||||
static void static_cancel_self ();
|
static void static_cancel_self ();
|
||||||
|
|
||||||
virtual int setcancelstate (int state, int *oldstate);
|
virtual int setcancelstate (int state, int *oldstate);
|
||||||
|
|
Loading…
Reference in New Issue