2013/1/13 Charles-François Natali <cf.nat...@gmail.com>: >> .. note:: >> OpenBSD older 5.2 does not close the file descriptor with >> close-on-exec flag set if ``fork()`` is used before ``exec()``, but >> it works correctly if ``exec()`` is called without ``fork()``. > > That would be *really* surprising, are your sure your test case is correct? > Otherwise it could be a compilation issue, because I simply can't > believe OpenBSD would ignore the close-on-exec flag.
I didn't write a C program yet, but you can test the folllowing Python script. On OpenBSD 4.9 it writes "OS BUG !!!". -- USE_FORK = True import fcntl, os, sys fd = os.open("/etc/passwd", os.O_RDONLY) flags = fcntl.fcntl(fd, fcntl.F_GETFD) flags |= fcntl.FD_CLOEXEC fcntl.fcntl(fd, fcntl.F_SETFD, flags) code = """ import os, sys fd = int(sys.argv[1]) try: os.fstat(fd) except OSError: print("fd %s closed by exec (FD_CLOEXEC works)" % fd) else: print("fd %s not closed by exec: FD_CLOEXEC doesn't work, OS BUG!!!" % fd) """ args = [sys.executable, '-c', code, str(fd)] if USE_FORK: pid = os.fork() if pid: os.waitpid(pid, 0) sys.exit(0) os.execv(args[0], args) -- It works with USE_FORKS = False. Victor _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com