--- Modules/posixmodule.c.orig 2008-02-03 07:20:39.000000000 +0000 +++ Modules/posixmodule.c 2008-05-31 16:24:54.000000000 +0100 @@ -2179,11 +2179,19 @@ return NULL; } for (;;) { + errno = 0; Py_BEGIN_ALLOW_THREADS ep = readdir(dirp); Py_END_ALLOW_THREADS - if (ep == NULL) - break; + if (ep == NULL) { + if (errno == 0) { + break; + } else { + closedir(dirp); + Py_DECREF(d); + return posix_error_with_allocated_filename(name); + } + } if (ep->d_name[0] == '.' && (NAMLEN(ep) == 1 || (ep->d_name[1] == '.' && NAMLEN(ep) == 2))) @@ -2220,12 +2228,6 @@ } Py_DECREF(v); } - if (errno != 0 && d != NULL) { - /* readdir() returned NULL and set errno */ - closedir(dirp); - Py_DECREF(d); - return posix_error_with_allocated_filename(name); - } closedir(dirp); PyMem_Free(name);