Subject: Emacs shell exits when executed command sets stdout and stderr to be non-blocking

From: "William K. Foster" <[email-masked]>
Date: Sun, 8 Mar 2009 13:56:48 -0700

Hello,

Create an application that does the following:

  void setFdBlocking(int fd, bool block) {
    // Set an fd's blocking flag on or off.
    int flags;

    if (0 > (flags = fcntl(fd, F_GETFL, 0))) {
      throw;
    }

    if (block) {
      flags &= ~O_NONBLOCK;
    } else {
      flags |=  O_NONBLOCK;
    }

    if (0 > fcntl(fd, F_SETFL, flags)) {
      throw;
    }
  }

  // Make Stdout and Stderr be non-blocking.
  setFdBlocking(1, false);
  setFdBlocking(2, false);

If you execute the application from a shell inside emacs, the shell will
exit when the command returns.

This does not happen for a shell outside of emacs.

Thanks.

-William