STINNER Victor added the comment:

> Assertion failed: !PyErr_Occurred(), file Objects/abstract.c, line 2158

Quick reminder: it's not a major bug if PyObject_Call() is called with an 
exception set. The exception will be kept in some cases. But I added the 
assertion because the exception is lost in some other cases. Example: calling 
hasattr(obj, name) replaces the current exception with an AttributeError and 
then clears the AttributeError exception if the object doesn't have the 
attribute.

> My guess is that fork() has failed,

Oh good job, it's exactly that: I'm able to reproduce the bug with your unit 
test (from your attached patch).

If I recall correctly, there is no overallocation on Solaris (OpenIndiana), and 
this buildbot is running low memory (MemoryError is very common). fork() can 
likely fail under low memory.

> and because preexec_fn is in use, the code tries to call gc.enable() with the 
> fork() exception already set. My patch adds a test and fixes that.

Hum, I think that your patch can be simplified. Replace:

    if (pid == -1) {
        PyErr_SetFromErrno(PyExc_OSError);
    ...
    if (need_to_reenable_gc && _enable_gc(gc_module)) ...

with:

    if (need_to_reenable_gc && _enable_gc(gc_module)) ...
    ...
    if (pid == -1) {
        PyErr_SetFromErrno(PyExc_OSError);

What do you think?

> Victor already fixed a similar error for the cleanup branch of 
> subprocess_fork_exec() in Issue 22290.

I reproduced the issue on Linux with pyfailmalloc.

You can play with pyfailmalloc to try to find similar bugs. The Bitbucket 
repository contains the latest debug_cpython.patch which adds some more checks 
to make the analysis faster and more effective, and debug_cpython.gdb contains 
commands to run it.

https://bitbucket.org/haypo/pyfailmalloc

----------

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

Reply via email to