Tim Golden added the comment:

In thread_nt.h:EnterNonRecursiveMutex the millisecond version (here: 2148000) 
of the seconds you passed in are converted to microseconds (so: 2148000000).

This is then passed to condvar.h:PyCOND_TIMEDWAIT which expects a long, whose 
32-bit limit is 2147483647. So it wraps around and becomes -2146967296. 

That value is then divided by 1000 once again to become milliseconds (-2146967) 
and passed to condvar.h:_PyCOND_WAIT_MS which expects a DWORD, which is a 
synonym for an unsigned long. Thus the signed value becomes an unsigned 
4292820329. Which then passed in as the millisecond timeout to 
WaitForSingleObjectEx.

So that's what's happening; but I'm really not sure at what stage a change 
should be made. It looks to me as if PyCOND_TIMEDWAIT should be accepting 
something more than a long, but I'm really not competent to assess the impact 
of such a change.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue20737>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to