• agl@chromium.org's avatar
    POSIX: Add code for shuffling file descriptors. · 3f04f2b1
    agl@chromium.org authored
    When forking a child process, one often wants to move existing file
    descriptors to well known locations (stdout, stderr etc). However,
    this is a process bedeviled with corner cases. Consider the case where
    you open two file descriptors, get assigned fds 1 and 0 for them and
    wish to shuffle them so that they end up in slots 0 and 1. Our current
    code fails in this case.
    
    We also have a problem where we're currently trying to mark file
    descriptors as close-on-exec rather than closing them in the child
    process. This is inherently broken in a multithreaded process where
    another thread can open a file descriptor and race the loop which is
    trying to mark them.
    
    Thus, on Linux we switch to close-after-fork where we known that no
    other threads exist in the process. On Mac, the code is sufficiently
    different that this simple fix isn't applicable and one of the Mac
    folks will need to take a look.
    
    http://codereview.chromium.org/100127
    BUG=11174
    
    
    git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14978 0039d316-1c4b-4281-b951-d872f2087c98
    3f04f2b1
file_descriptor_shuffle.cc 2.1 KB