to explain the meaning of the possible values. * cygwait.cc (is_cw_sig_restart): Define. (is_cw_sig_handle): Check for cw_sig_restart as well. (cygwait): Restart always if cw_sig_restart is set. * thread.cc (pthread::join): Call cygwait with cw_sig_restart flag to avoid having to handle signals at all.
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* cygwait.h
 | |
| 
 | |
|    Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
 | |
|    2015 Red Hat, Inc.
 | |
| 
 | |
|    This file is part of Cygwin.
 | |
| 
 | |
|    This software is a copyrighted work licensed under the terms of the
 | |
|    Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 | |
|    details.  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #define WAIT_CANCELED   (WAIT_OBJECT_0 + 2)
 | |
| #define WAIT_SIGNALED  (WAIT_OBJECT_0 + 1)
 | |
| 
 | |
| enum cw_wait_mask
 | |
| {
 | |
|   cw_cancel =		0x0001,	/* Cancellation point.  Return to caller. */
 | |
|   cw_cancel_self =	0x0002,	/* Cancellation point.  Cancel self. */
 | |
|   cw_sig =		0x0004,	/* Handle signals. */
 | |
|   cw_sig_eintr =	0x0008,	/* Caller handles signals. */
 | |
|   cw_sig_cont =		0x0010,	/* Caller handles SIGCONT. */
 | |
|   cw_sig_restart =	0x0020	/* Restart even if SA_RESTART isn't set. */
 | |
| };
 | |
| 
 | |
| extern LARGE_INTEGER cw_nowait_storage;
 | |
| #define cw_nowait (&cw_nowait_storage)
 | |
| #define cw_infinite ((PLARGE_INTEGER) NULL)
 | |
| 
 | |
| const unsigned cw_std_mask = cw_cancel | cw_cancel_self | cw_sig;
 | |
| 
 | |
| DWORD __reg3 cygwait (HANDLE, PLARGE_INTEGER timeout,
 | |
| 		       unsigned = cw_std_mask);
 | |
| 
 | |
| extern inline DWORD __attribute__ ((always_inline))
 | |
| cygwait (HANDLE h, DWORD howlong, unsigned mask)
 | |
| {
 | |
|   LARGE_INTEGER li_howlong;
 | |
|   PLARGE_INTEGER pli_howlong;
 | |
|   if (howlong == INFINITE)
 | |
|     pli_howlong = NULL;
 | |
|   else
 | |
|     {
 | |
|       li_howlong.QuadPart = -(10000ULL * howlong);
 | |
|       pli_howlong = &li_howlong;
 | |
|     }
 | |
|   return cygwait (h, pli_howlong, mask);
 | |
| }
 | |
| 
 | |
| static inline DWORD __attribute__ ((always_inline))
 | |
| cygwait (HANDLE h, DWORD howlong = INFINITE)
 | |
| {
 | |
|   return cygwait (h, howlong, cw_cancel | cw_sig);
 | |
| }
 | |
| 
 | |
| static inline DWORD __attribute__ ((always_inline))
 | |
| cygwait (DWORD howlong)
 | |
| {
 | |
|   return cygwait (NULL, howlong);
 | |
| }
 |