* sigproc.h (set_signal_mask): Remove default on second parameter and make pass
by reference. * signal.cc (abort): Accommodate change to set_signal_mask. * select.cc (pselect): Ditto. * exceptions.cc (handle_sigsuspend): Ditto. (ctrl_c_handler): Ditto. (sighold): Ditto. (sigrelse): Ditto. (set_process_mask_delta): Ditto. (_cygtls::call_signal_handler): Ditto. * fhandler_disk_file.cc (fhandler_disk_file::readdir): Return ENMFILE if __handle is not set. Set __handle to NULL when out of files. (fhandler_disk_file::rewinddir): Don't close handle if it's NULL. (fhandler_disk_file::closedir): Ditto.
This commit is contained in:
		
							parent
							
								
									3e4aef50dc
								
							
						
					
					
						commit
						db7f135b03
					
				|  | @ -1,3 +1,21 @@ | ||||||
|  | 2005-08-23  Christopher Faylor  <cgf@timesys.com> | ||||||
|  | 
 | ||||||
|  | 	* sigproc.h (set_signal_mask): Remove default on second parameter and | ||||||
|  | 	make pass by reference. | ||||||
|  | 	* signal.cc (abort): Accommodate change to set_signal_mask. | ||||||
|  | 	* select.cc (pselect): Ditto. | ||||||
|  | 	* exceptions.cc (handle_sigsuspend): Ditto. | ||||||
|  | 	(ctrl_c_handler): Ditto. | ||||||
|  | 	(sighold): Ditto. | ||||||
|  | 	(sigrelse): Ditto. | ||||||
|  | 	(set_process_mask_delta): Ditto. | ||||||
|  | 	(_cygtls::call_signal_handler): Ditto. | ||||||
|  | 
 | ||||||
|  | 	* fhandler_disk_file.cc (fhandler_disk_file::readdir): Return ENMFILE | ||||||
|  | 	if __handle is not set.  Set __handle to NULL when out of files. | ||||||
|  | 	(fhandler_disk_file::rewinddir): Don't close handle if it's NULL. | ||||||
|  | 	(fhandler_disk_file::closedir): Ditto. | ||||||
|  | 
 | ||||||
| 2005-08-22  Christopher Faylor  <cgf@timesys.com> | 2005-08-22  Christopher Faylor  <cgf@timesys.com> | ||||||
| 
 | 
 | ||||||
| 	* dir.cc (readdir_worker): Make static.  Only add '.' and '..' when | 	* dir.cc (readdir_worker): Make static.  Only add '.' and '..' when | ||||||
|  |  | ||||||
|  | @ -592,7 +592,7 @@ handle_sigsuspend (sigset_t tempmask) | ||||||
| { | { | ||||||
|   sigset_t oldmask = myself->getsigmask ();	// Remember for restoration
 |   sigset_t oldmask = myself->getsigmask ();	// Remember for restoration
 | ||||||
| 
 | 
 | ||||||
|   set_signal_mask (tempmask, oldmask); |   set_signal_mask (tempmask, myself->getsigmask ()); | ||||||
|   sigproc_printf ("oldmask %p, newmask %p", oldmask, tempmask); |   sigproc_printf ("oldmask %p, newmask %p", oldmask, tempmask); | ||||||
| 
 | 
 | ||||||
|   pthread_testcancel (); |   pthread_testcancel (); | ||||||
|  | @ -910,7 +910,7 @@ ctrl_c_handler (DWORD type) | ||||||
| extern "C" void __stdcall | extern "C" void __stdcall | ||||||
| set_process_mask (sigset_t newmask) | set_process_mask (sigset_t newmask) | ||||||
| { | { | ||||||
|   set_signal_mask (newmask); |   set_signal_mask (newmask, myself->getsigmask ()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| extern "C" int | extern "C" int | ||||||
|  | @ -926,7 +926,7 @@ sighold (int sig) | ||||||
|   mask_sync.acquire (INFINITE); |   mask_sync.acquire (INFINITE); | ||||||
|   sigset_t mask = myself->getsigmask (); |   sigset_t mask = myself->getsigmask (); | ||||||
|   sigaddset (&mask, sig); |   sigaddset (&mask, sig); | ||||||
|   set_signal_mask (mask); |   set_signal_mask (mask, myself->getsigmask ()); | ||||||
|   mask_sync.release (); |   mask_sync.release (); | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  | @ -944,7 +944,7 @@ sigrelse (int sig) | ||||||
|   mask_sync.acquire (INFINITE); |   mask_sync.acquire (INFINITE); | ||||||
|   sigset_t mask = myself->getsigmask (); |   sigset_t mask = myself->getsigmask (); | ||||||
|   sigdelset (&mask, sig); |   sigdelset (&mask, sig); | ||||||
|   set_signal_mask (mask); |   set_signal_mask (mask, myself->getsigmask ()); | ||||||
|   mask_sync.release (); |   mask_sync.release (); | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  | @ -973,14 +973,14 @@ set_process_mask_delta () | ||||||
| /* Set the signal mask for this process.
 | /* Set the signal mask for this process.
 | ||||||
|    Note that some signals are unmaskable, as in UNIX.  */ |    Note that some signals are unmaskable, as in UNIX.  */ | ||||||
| extern "C" void __stdcall | extern "C" void __stdcall | ||||||
| set_signal_mask (sigset_t newmask, sigset_t oldmask) | set_signal_mask (sigset_t newmask, sigset_t& oldmask) | ||||||
| { | { | ||||||
|   mask_sync.acquire (INFINITE); |   mask_sync.acquire (INFINITE); | ||||||
|   newmask &= ~SIG_NONMASKABLE; |   newmask &= ~SIG_NONMASKABLE; | ||||||
|   sigset_t mask_bits = oldmask & ~newmask; |   sigset_t mask_bits = oldmask & ~newmask; | ||||||
|   sigproc_printf ("oldmask %p, newmask %p, mask_bits %p", oldmask, newmask, |   sigproc_printf ("oldmask %p, newmask %p, mask_bits %p", oldmask, newmask, | ||||||
| 		  mask_bits); | 		  mask_bits); | ||||||
|   myself->setsigmask (newmask);	// Set a new mask
 |   oldmask = newmask; | ||||||
|   if (mask_bits) |   if (mask_bits) | ||||||
|     sig_dispatch_pending (true); |     sig_dispatch_pending (true); | ||||||
|   else |   else | ||||||
|  | @ -1225,7 +1225,7 @@ _cygtls::call_signal_handler () | ||||||
|       sig = 0; |       sig = 0; | ||||||
|       sigfunc (thissig); |       sigfunc (thissig); | ||||||
|       incyg++; |       incyg++; | ||||||
|       set_signal_mask (this_oldmask); |       set_signal_mask (this_oldmask, myself->getsigmask ()); | ||||||
|       if (this_errno >= 0) |       if (this_errno >= 0) | ||||||
| 	set_errno (this_errno); | 	set_errno (this_errno); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -1355,6 +1355,11 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de) | ||||||
|   HANDLE handle; |   HANDLE handle; | ||||||
|   int res; |   int res; | ||||||
| 
 | 
 | ||||||
|  |   if (!dir->__handle) | ||||||
|  |     { | ||||||
|  |       res = ENMFILE; | ||||||
|  |       goto out; | ||||||
|  |     } | ||||||
|   if (dir->__handle == INVALID_HANDLE_VALUE && dir->__d_position == 0) |   if (dir->__handle == INVALID_HANDLE_VALUE && dir->__d_position == 0) | ||||||
|     { |     { | ||||||
|       handle = FindFirstFileA (dir->__d_dirname, &buf); |       handle = FindFirstFileA (dir->__d_dirname, &buf); | ||||||
|  | @ -1399,11 +1404,8 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de) | ||||||
|       else |       else | ||||||
| 	{ | 	{ | ||||||
| 	  res = geterrno_from_win_error (); | 	  res = geterrno_from_win_error (); | ||||||
| 	  if (res != ENMFILE) | 	  FindClose (dir->__handle); | ||||||
| 	    { | 	  dir->__handle = NULL; | ||||||
| 	      FindClose (dir->__handle); |  | ||||||
| 	      dir->__handle = INVALID_HANDLE_VALUE; |  | ||||||
| 	    } |  | ||||||
| 	  goto out; | 	  goto out; | ||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
|  | @ -1469,7 +1471,8 @@ fhandler_disk_file::rewinddir (DIR *dir) | ||||||
| { | { | ||||||
|   if (dir->__handle != INVALID_HANDLE_VALUE) |   if (dir->__handle != INVALID_HANDLE_VALUE) | ||||||
|     { |     { | ||||||
|       FindClose (dir->__handle); |       if (dir->__handle) | ||||||
|  | 	FindClose (dir->__handle); | ||||||
|       dir->__handle = INVALID_HANDLE_VALUE; |       dir->__handle = INVALID_HANDLE_VALUE; | ||||||
|     } |     } | ||||||
|   dir->__d_position = 0; |   dir->__d_position = 0; | ||||||
|  | @ -1479,8 +1482,8 @@ int | ||||||
| fhandler_disk_file::closedir (DIR *dir) | fhandler_disk_file::closedir (DIR *dir) | ||||||
| { | { | ||||||
|   int res = 0; |   int res = 0; | ||||||
|   if (dir->__handle != INVALID_HANDLE_VALUE && |   if (dir->__handle && dir->__handle != INVALID_HANDLE_VALUE | ||||||
|       FindClose (dir->__handle) == 0) |       && FindClose (dir->__handle) == 0) | ||||||
|     { |     { | ||||||
|       __seterrno (); |       __seterrno (); | ||||||
|       res = -1; |       res = -1; | ||||||
|  |  | ||||||
|  | @ -175,11 +175,11 @@ pselect(int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, | ||||||
|       tv.tv_usec = ts->tv_nsec / 1000; |       tv.tv_usec = ts->tv_nsec / 1000; | ||||||
|     } |     } | ||||||
|   if (set) |   if (set) | ||||||
|     set_signal_mask (*set); |     set_signal_mask (*set, myself->getsigmask ()); | ||||||
|   int ret = cygwin_select (maxfds, readfds, writefds, exceptfds, |   int ret = cygwin_select (maxfds, readfds, writefds, exceptfds, | ||||||
| 			   ts ? &tv : NULL); | 			   ts ? &tv : NULL); | ||||||
|   if (set) |   if (set) | ||||||
|     set_signal_mask (oldset); |     set_signal_mask (oldset, myself->getsigmask ()); | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -329,7 +329,7 @@ abort (void) | ||||||
|   sigset_t sig_mask; |   sigset_t sig_mask; | ||||||
|   sigfillset (&sig_mask); |   sigfillset (&sig_mask); | ||||||
|   sigdelset (&sig_mask, SIGABRT); |   sigdelset (&sig_mask, SIGABRT); | ||||||
|   set_signal_mask (sig_mask); |   set_signal_mask (sig_mask, myself->getsigmask ()); | ||||||
| 
 | 
 | ||||||
|   raise (SIGABRT); |   raise (SIGABRT); | ||||||
|   _my_tls.call_signal_handler (); /* Call any signal handler */ |   _my_tls.call_signal_handler (); /* Call any signal handler */ | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ extern HANDLE sigCONT; | ||||||
| 
 | 
 | ||||||
| void __stdcall sig_dispatch_pending (bool fast = false); | void __stdcall sig_dispatch_pending (bool fast = false); | ||||||
| #ifdef _PINFO_H | #ifdef _PINFO_H | ||||||
| extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t = myself->getsigmask ()); | extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t&); | ||||||
| #endif | #endif | ||||||
| int __stdcall handle_sigprocmask (int sig, const sigset_t *set, | int __stdcall handle_sigprocmask (int sig, const sigset_t *set, | ||||||
| 				  sigset_t *oldset, sigset_t& opmask) | 				  sigset_t *oldset, sigset_t& opmask) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue