[issue10350] errno is read too late
Hallvard B Furuseth
report at bugs.python.org
Mon Nov 15 09:59:24 CET 2010
Hallvard B Furuseth <h.b.furuseth at usit.uio.no> added the comment:
Terry J. Reedy writes:
> There is one relocation of memory freeing
Modules/timemodule.c does '#if,if(..errno..)' after PyMem_Free(outbuf),
which can overwrite the desired errno. Instead of reading errno into
a temporary, I moved the free into both branches taken by the #if,if().
> and the additions of
> + if (res >= 0)
> + break;
> which I cannot evaluate.
errno is only needed after an error., so I moved 'res < 0' out of the
'while'.
if (res == MP_EXCEPTION_HAS_BEEN_SET) break;
} while (res < 0 && errno == EINTR && !PyErr_CheckSignals());
-->
if (res == MP_EXCEPTION_HAS_BEEN_SET) break;
if (! (res < 0)) break;
} while (errno == EINTR && !PyErr_CheckSignals());
-->
if (res >= 0) break;
err = errno;
if (res == MP_EXCEPTION_HAS_BEEN_SET) break;
} while (err == EINTR && !PyErr_CheckSignals());
----------
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue10350>
_______________________________________
More information about the Python-bugs-list
mailing list