1 diff -ruN Python-2.6.7-orig/Modules/posixmodule.c Python-2.6.7/Modules/posixmodule.c
   2 --- Python-2.6.7-orig/Modules/posixmodule.c     2010-07-24 10:05:19.000000000 +0000
   3 +++ Python-2.6.7/Modules/posixmodule.c  2012-02-15 21:00:26.835701885 +0000
   4 @@ -6376,15 +6376,34 @@
   5  "closerange(fd_low, fd_high)\n\n\
   6  Closes all file descriptors in [fd_low, fd_high), ignoring errors.");
   7  
   8 +static int
   9 +close_func(void *lohi, int fd)
  10 +{
  11 +    int lo = ((int *)lohi)[0];
  12 +    int hi = ((int *)lohi)[1];
  13 +
  14 +    if (fd >= hi)
  15 +        return (1);
  16 +    else if (fd >= lo)
  17 +        close(fd);
  18 +
  19 +    return (0);
  20 +}
  21 +
  22  static PyObject *
  23  posix_closerange(PyObject *self, PyObject *args)
  24  {
  25      int fd_from, fd_to, i;
  26 +    int lohi[2];
  27 +
  28      if (!PyArg_ParseTuple(args, "ii:closerange", &fd_from, &fd_to))
  29          return NULL;
  30      Py_BEGIN_ALLOW_THREADS
  31 -    for (i = fd_from; i < fd_to; i++)
  32 -        close(i);
  33 +
  34 +    lohi[0] = fd_from;
  35 +    lohi[1] = fd_to;
  36 +    fdwalk(close_func, lohi);
  37 +
  38      Py_END_ALLOW_THREADS
  39      Py_RETURN_NONE;
  40  }