Change "set_thread_waiting" to "set_signal_arrived" throughout.
This commit is contained in:
parent
962f9a2ccc
commit
44aa2292b7
@ -1,3 +1,7 @@
|
|||||||
|
2012-07-23 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||||
|
|
||||||
|
Change "set_thread_waiting" to "set_signal_arrived" throughout.
|
||||||
|
|
||||||
2012-07-21 Christopher Faylor <me.cygwin2012@cgf.cx>
|
2012-07-21 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||||
|
|
||||||
* DevNotes: Add entry cgf-000013.
|
* DevNotes: Add entry cgf-000013.
|
||||||
|
@ -4,7 +4,7 @@ These changes reflect a revamp of the "wait for signal" functionality
|
|||||||
which has existed in Cygwin through several signal massages.
|
which has existed in Cygwin through several signal massages.
|
||||||
|
|
||||||
We now create a signal event only when a thread is waiting for a signal
|
We now create a signal event only when a thread is waiting for a signal
|
||||||
and arm it only for that thread. The "set_thread_waiting" function is
|
and arm it only for that thread. The "set_signal_arrived" function is
|
||||||
used to establish the event and set it in a location referencable by
|
used to establish the event and set it in a location referencable by
|
||||||
the caller.
|
the caller.
|
||||||
|
|
||||||
|
@ -377,7 +377,7 @@ cygthread::detach (HANDLE sigwait)
|
|||||||
unsigned n = 2;
|
unsigned n = 2;
|
||||||
DWORD howlong = INFINITE;
|
DWORD howlong = INFINITE;
|
||||||
w4[0] = sigwait;
|
w4[0] = sigwait;
|
||||||
set_thread_waiting here (w4[1]);
|
set_signal_arrived here (w4[1]);
|
||||||
/* For a description of the below loop see the end of this file */
|
/* For a description of the below loop see the end of this file */
|
||||||
for (int i = 0; i < 2; i++)
|
for (int i = 0; i < 2; i++)
|
||||||
switch (res = WaitForMultipleObjects (n, w4, FALSE, howlong))
|
switch (res = WaitForMultipleObjects (n, w4, FALSE, howlong))
|
||||||
|
@ -315,14 +315,14 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class set_thread_waiting
|
class set_signal_arrived
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
set_thread_waiting (bool setit, HANDLE& h) { _my_tls.set_signal_arrived (setit, h); }
|
set_signal_arrived (bool setit, HANDLE& h) { _my_tls.set_signal_arrived (setit, h); }
|
||||||
set_thread_waiting (HANDLE& h) { _my_tls.set_signal_arrived (true, h); }
|
set_signal_arrived (HANDLE& h) { _my_tls.set_signal_arrived (true, h); }
|
||||||
|
|
||||||
operator int () const {return _my_tls.signal_waiting;}
|
operator int () const {return _my_tls.signal_waiting;}
|
||||||
~set_thread_waiting () { _my_tls.signal_waiting = false; }
|
~set_signal_arrived () { _my_tls.signal_waiting = false; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#define __getreent() (&_my_tls.local_clib)
|
#define __getreent() (&_my_tls.local_clib)
|
||||||
|
@ -38,7 +38,7 @@ cancelable_wait (HANDLE object, PLARGE_INTEGER timeout, unsigned mask)
|
|||||||
if (object)
|
if (object)
|
||||||
wait_objects[num++] = object;
|
wait_objects[num++] = object;
|
||||||
|
|
||||||
set_thread_waiting thread_waiting (is_cw_sig_handle, wait_objects[num]);
|
set_signal_arrived thread_waiting (is_cw_sig_handle, wait_objects[num]);
|
||||||
debug_printf ("thread waiting %d, signal_arrived %p", (int) thread_waiting, _my_tls.signal_arrived);
|
debug_printf ("thread waiting %d, signal_arrived %p", (int) thread_waiting, _my_tls.signal_arrived);
|
||||||
DWORD sig_n;
|
DWORD sig_n;
|
||||||
if (!thread_waiting)
|
if (!thread_waiting)
|
||||||
|
@ -658,7 +658,7 @@ fhandler_socket::wait_for_events (const long event_mask, const DWORD flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
WSAEVENT ev[2] = { wsock_evt };
|
WSAEVENT ev[2] = { wsock_evt };
|
||||||
set_thread_waiting here (ev[1]);
|
set_signal_arrived here (ev[1]);
|
||||||
switch (WSAWaitForMultipleEvents (2, ev, FALSE, 50, FALSE))
|
switch (WSAWaitForMultipleEvents (2, ev, FALSE, 50, FALSE))
|
||||||
{
|
{
|
||||||
case WSA_WAIT_TIMEOUT:
|
case WSA_WAIT_TIMEOUT:
|
||||||
|
@ -97,7 +97,7 @@ fhandler_windows::read (void *buf, size_t& len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
HANDLE w4[3] = { get_handle (), };
|
HANDLE w4[3] = { get_handle (), };
|
||||||
set_thread_waiting here (w4[1]);
|
set_signal_arrived here (w4[1]);
|
||||||
DWORD cnt = 2;
|
DWORD cnt = 2;
|
||||||
if ((w4[cnt] = pthread::get_cancel_event ()) != NULL)
|
if ((w4[cnt] = pthread::get_cancel_event ()) != NULL)
|
||||||
++cnt;
|
++cnt;
|
||||||
|
@ -1247,7 +1247,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
|
|||||||
timeout = 100L;
|
timeout = 100L;
|
||||||
|
|
||||||
DWORD WAIT_SIGNAL_ARRIVED = WAIT_OBJECT_0 + wait_count;
|
DWORD WAIT_SIGNAL_ARRIVED = WAIT_OBJECT_0 + wait_count;
|
||||||
set_thread_waiting here (w4[wait_count++]);
|
set_signal_arrived here (w4[wait_count++]);
|
||||||
|
|
||||||
DWORD WAIT_THREAD_CANCELED = WAIT_TIMEOUT + 1;
|
DWORD WAIT_THREAD_CANCELED = WAIT_TIMEOUT + 1;
|
||||||
HANDLE cancel_event = pthread::get_cancel_event ();
|
HANDLE cancel_event = pthread::get_cancel_event ();
|
||||||
|
@ -177,7 +177,7 @@ ipc_cond_timedwait (HANDLE evt, HANDLE mtx, const struct timespec *abstime)
|
|||||||
DWORD timer_idx = 0;
|
DWORD timer_idx = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
set_thread_waiting here (w4[1]);
|
set_signal_arrived here (w4[1]);
|
||||||
if ((w4[cnt] = pthread::get_cancel_event ()) != NULL)
|
if ((w4[cnt] = pthread::get_cancel_event ()) != NULL)
|
||||||
++cnt;
|
++cnt;
|
||||||
if (abstime)
|
if (abstime)
|
||||||
|
@ -332,7 +332,7 @@ select_stuff::wait (fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|||||||
select_record *s = &start;
|
select_record *s = &start;
|
||||||
DWORD m = 0;
|
DWORD m = 0;
|
||||||
|
|
||||||
set_thread_waiting here (w4[m++]);
|
set_signal_arrived here (w4[m++]);
|
||||||
if ((w4[m] = pthread::get_cancel_event ()) != NULL)
|
if ((w4[m] = pthread::get_cancel_event ()) != NULL)
|
||||||
m++;
|
m++;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user