[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