summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Windows/2020-03-04-17-05-11.bpo-39847.C3N2m3.rst2
-rw-r--r--Python/thread_nt.h6
2 files changed, 5 insertions, 3 deletions
diff --git a/Misc/NEWS.d/next/Windows/2020-03-04-17-05-11.bpo-39847.C3N2m3.rst b/Misc/NEWS.d/next/Windows/2020-03-04-17-05-11.bpo-39847.C3N2m3.rst
new file mode 100644
index 0000000000..acfbce53eb
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2020-03-04-17-05-11.bpo-39847.C3N2m3.rst
@@ -0,0 +1,2 @@
+Avoid hang when computer is hibernated whilst waiting for a mutex (for
+lock-related objects from :mod:`threading`) around 49-day uptime.
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index a5246dd050..23d585cf9f 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -75,16 +75,16 @@ EnterNonRecursiveMutex(PNRMUTEX mutex, DWORD milliseconds)
}
} else if (milliseconds != 0) {
/* wait at least until the target */
- DWORD now, target = GetTickCount() + milliseconds;
+ ULONGLONG now, target = GetTickCount64() + milliseconds;
while (mutex->locked) {
if (PyCOND_TIMEDWAIT(&mutex->cv, &mutex->cs, (long long)milliseconds*1000) < 0) {
result = WAIT_FAILED;
break;
}
- now = GetTickCount();
+ now = GetTickCount64();
if (target <= now)
break;
- milliseconds = target-now;
+ milliseconds = (DWORD)(target-now);
}
}
if (!mutex->locked) {