mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	bpo-41299: Reduce lag in Windows threading timeouts by using a higher precision time source (GH-26568)
This commit is contained in:
		
							parent
							
								
									2ab27c4af4
								
							
						
					
					
						commit
						449e6f0ef3
					
				
					 2 changed files with 11 additions and 4 deletions
				
			
		|  | @ -76,16 +76,22 @@ EnterNonRecursiveMutex(PNRMUTEX mutex, DWORD milliseconds) | |||
|         } | ||||
|     } else if (milliseconds != 0) { | ||||
|         /* wait at least until the target */ | ||||
|         ULONGLONG now, target = GetTickCount64() + milliseconds; | ||||
|         _PyTime_t now = _PyTime_GetPerfCounter(); | ||||
|         if (now <= 0) { | ||||
|             Py_FatalError("_PyTime_GetPerfCounter() == 0"); | ||||
|         } | ||||
|         _PyTime_t nanoseconds = _PyTime_FromNanoseconds((_PyTime_t)milliseconds * 1000000); | ||||
|         _PyTime_t target = now + nanoseconds; | ||||
|         while (mutex->locked) { | ||||
|             if (PyCOND_TIMEDWAIT(&mutex->cv, &mutex->cs, (long long)milliseconds*1000) < 0) { | ||||
|             _PyTime_t microseconds = _PyTime_AsMicroseconds(nanoseconds, _PyTime_ROUND_TIMEOUT); | ||||
|             if (PyCOND_TIMEDWAIT(&mutex->cv, &mutex->cs, microseconds) < 0) { | ||||
|                 result = WAIT_FAILED; | ||||
|                 break; | ||||
|             } | ||||
|             now = GetTickCount64(); | ||||
|             now = _PyTime_GetPerfCounter(); | ||||
|             if (target <= now) | ||||
|                 break; | ||||
|             milliseconds = (DWORD)(target-now); | ||||
|             nanoseconds = target - now; | ||||
|         } | ||||
|     } | ||||
|     if (!mutex->locked) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ryan Hileman
						Ryan Hileman