=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: msvcp: Cast the wait time in _Cnd_timedwait to ULONG.

Alexandre Julliard julliard at winehq.org
Wed Dec 6 17:18:16 CST 2017


Module: wine
Branch: master
Commit: 3ea7102cbe4a365f4364bc633f4b7f31f168c1ed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3ea7102cbe4a365f4364bc633f4b7f31f168c1ed

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Wed Dec  6 13:50:21 2017 +0100

msvcp: Cast the wait time in _Cnd_timedwait to ULONG.

This prevents sign extending it when promoting it to ULONGLONG. This
fixes high CPU usage in Wargaming Game Center that was caused by
_Cnd_timedwait instantly returning timeout instead of waiting for the
requested 30 days.

Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcp90/misc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c
index 901930b..159e9d6 100644
--- a/dlls/msvcp90/misc.c
+++ b/dlls/msvcp90/misc.c
@@ -635,7 +635,7 @@ int __cdecl _Cnd_timedwait(_Cnd_arg_t cnd, _Mtx_arg_t mtx, const xtime *xt)
     InterlockedExchangeAdd( (LONG *)&cv->Ptr, 1 );
     _Mtx_unlock(mtx);
 
-    timeout.QuadPart = (ULONGLONG)_Xtime_diff_to_millis(xt) * -10000;
+    timeout.QuadPart = (ULONGLONG)(ULONG)_Xtime_diff_to_millis(xt) * -10000;
     status = NtWaitForKeyedEvent(keyed_event, &cv->Ptr, FALSE, &timeout);
     if (status)
     {




More information about the wine-cvs mailing list