[issue23060] Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows

2014-12-17 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 1794d754ff3c by Steve Dower in branch 'default':
Issue #23060: Suppresses a multiprocessing assert that fails incorrectly
https://hg.python.org/cpython/rev/1794d754ff3c

--
nosy: +python-dev

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23060
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23060] Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows

2014-12-17 Thread Steve Dower

Steve Dower added the comment:

I've commented out the assertion for now with a comment pointing to this issue, 
so that'll keep the buildbots running while we figure out how to deal with this 
properly.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23060
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23060] Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows

2014-12-16 Thread Tim Golden

Tim Golden added the comment:

I agree that this is a fragile assertion; it's too far removed from the
CreateFileMapping call which can generate it and almost impossible to
work around (in calling code) if it should fail in the way we're seeing
in the buildbot.

I think we're better off relying on a genuine exception bubbling up from
the CreateFileMapping/MapViewOfFile calls than trying to assert the
no-exception error return.

While the preallocate self.buffer hack you mention would probably have
the effect of preventing the assertion, it's really just adding another
layer of unwanted complexity. (And might still not work in some future
memory-allocation algorithm).

@Richard: if you're watching, have I missed anything?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23060
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23060] Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows

2014-12-16 Thread Antoine Pitrou

Antoine Pitrou added the comment:

Or perhaps:

buffer = mmap.mmap(-1, self.size, tagname=self.name)
assert _winapi.GetLastError() == _winapi.ERROR_ALREADY_EXISTS
self.buffer = buffer

?

--
nosy: +pitrou

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23060
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23060] Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows

2014-12-16 Thread Steve Dower

Steve Dower added the comment:

That was actually my first hack and it also works. The fundamental problem here 
is that GetLastError() is not actually meant to indicate *whether* an error has 
occurred, but when one has occurred it describes what it was.

Indeed, in this case no error has occurred - CreateFileMapping was called and 
there is a file mapping available. OpenFileMapping is provided if an error is 
required when the mapping does not already exist.

The best option is definitely a separate method (or parameter) on mmap to 
open/raise rather than open/create. I may just comment out the assertion with a 
reference to this bug in the meantime, so that the buildbots aren't getting 
stuck every time.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23060
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23060] Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows

2014-12-15 Thread Steve Dower

New submission from Steve Dower:

Currently, the implementation of __setstate__ at Lib/multiprocessing/heap.py:54 
looks like this:

def __setstate__(self, state):
self.size, self.name = self._state = state
self.buffer = mmap.mmap(-1, self.size, tagname=self.name)
assert _winapi.GetLastError() == _winapi.ERROR_ALREADY_EXISTS

This assertion can fail when the assignment to buffer triggers memory 
[re]allocation, which could clear the last error result. So far, this fails 
reliably on debug builds using VS 2015 (which causes some tests to timeout when 
all of the child processes fail to start), but could also fail in threaded code 
at any time.

I don't know why release builds or builds with VS 2010 did not trigger this, 
but I would speculate that either VS 2015 is using a different API to allocate 
memory or Windows 8.1 has changed the behaviour of an API. Whether a function 
resets the last error code is deliberately unspecified 
(http://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx 
- some functions set the last-error code to 0 on success and others do not).

In my opinion, the assertion should just be removed.

A hack that appears to work currently is to add self.buffer = None before the 
existing assignment (to pre-expand self.__dict__ and avoid the allocation).

If the assertion is important, someone may want to add a parameter to mmap() to 
require that the memory-mapped file already exists and throws otherwise, but I 
am not volunteering to do this.

--
components: Windows
messages: 232697
nosy: jnoller, sbt, steve.dower, tim.golden, zach.ware
priority: normal
severity: normal
status: open
title: Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows
versions: Python 3.5

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23060
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23060] Assert fails in multiprocessing.heap.Arena.__setstate__ on Windows

2014-12-15 Thread Steve Dower

Steve Dower added the comment:

A buildbot failure due to this can be seen here: 
http://buildbot.python.org/all/builders/AMD64%20Windows8%203.x/builds/183/steps/test/logs/stdio

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23060
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com