* exceptions.cc (try_to_debug): Don't use yield() when waiting for another
process. (sigpacket::setup_handler): Fix long-standing problem where loop could exit with lock held.
This commit is contained in:
		| @@ -508,7 +508,7 @@ try_to_debug (bool waitloop) | ||||
| 	return dbg; | ||||
|       SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE); | ||||
|       while (!being_debugged ()) | ||||
| 	yield (); | ||||
| 	Sleep (1); | ||||
|       Sleep (2000); | ||||
|     } | ||||
|  | ||||
| @@ -923,7 +923,10 @@ sigpacket::setup_handler (void *handler, struct sigaction& siga, _cygtls *tls) | ||||
| 	  DWORD res; | ||||
| 	  HANDLE hth = (HANDLE) *tls; | ||||
| 	  if (!hth) | ||||
| 	    sigproc_printf ("thread handle NULL, not set up yet?"); | ||||
| 	    { | ||||
| 	      tls->unlock (); | ||||
| 	      sigproc_printf ("thread handle NULL, not set up yet?"); | ||||
| 	    } | ||||
| 	  else | ||||
| 	    { | ||||
| 	      /* Suspend the thread which will receive the signal. | ||||
| @@ -936,6 +939,7 @@ sigpacket::setup_handler (void *handler, struct sigaction& siga, _cygtls *tls) | ||||
| 	      /* Just set pending if thread is already suspended */ | ||||
| 	      if (res) | ||||
| 		{ | ||||
| 		  tls->unlock (); | ||||
| 		  ResumeThread (hth); | ||||
| 		  goto out; | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user