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:
parent
98008efcf8
commit
3d051d41a3
2
src/3rdparty/forkfd/forkfd.c
vendored
2
src/3rdparty/forkfd/forkfd.c
vendored
@ -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;
|
||||
}
|
||||
|
4
src/3rdparty/forkfd/forkfd.h
vendored
4
src/3rdparty/forkfd/forkfd.h
vendored
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user