Fix forkfd build when O_CLOEXEC isn't defined.

O_CLOEXEC was introduced with the 2008 revision of POSIX.1 and it's the
only way of doing child processes safely with fork(2) in multithreaded
applications.

But we need to support pre-2008 systems, so we can't use that constant.
So let's just choose two arbitrary values for both of our constants --
we need to change both because we need to be sure that FFD_CLOEXEC won't
be the same as FFD_NONBLOCK.

Linux will probably implement them to the O_ constants, like epoll,
signalfd and inotify have done.

Change-Id: I20a5aa6e6264e7a219e19759eeb8747e01df05ff
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
This commit is contained in:
Thiago Macieira 2015-01-05 14:25:14 -08:00
parent 98008efcf8
commit 3d051d41a3
2 changed files with 3 additions and 3 deletions

View File

@ -404,7 +404,7 @@ int forkfd(int flags, pid_t *ppid)
#endif
{
/* try a pipe */
if (create_pipe(sync_pipe, O_CLOEXEC) == -1) {
if (create_pipe(sync_pipe, FFD_CLOEXEC) == -1) {
/* failed both at eventfd and pipe; fail and pass errno */
goto err_close;
}

View File

@ -44,8 +44,8 @@
extern "C" {
#endif
#define FFD_CLOEXEC O_CLOEXEC
#define FFD_NONBLOCK O_NONBLOCK
#define FFD_CLOEXEC 1
#define FFD_NONBLOCK 2
#define FFD_CHILD_PROCESS (-2)