mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-25 22:54:57 +02:00
Implement support for systems where pipe2 returns ENOSYS
fixes #7065 fixes #6696
This commit is contained in:
parent
4da18d6de1
commit
039a13cf88
@ -71,23 +71,24 @@ void Process::StaticInitialize(void)
|
|||||||
#else /* _WIN32 */
|
#else /* _WIN32 */
|
||||||
# ifdef HAVE_PIPE2
|
# ifdef HAVE_PIPE2
|
||||||
if (pipe2(l_EventFDs[tid], O_CLOEXEC) < 0) {
|
if (pipe2(l_EventFDs[tid], O_CLOEXEC) < 0) {
|
||||||
BOOST_THROW_EXCEPTION(posix_error()
|
if (errno == ENOSYS) {
|
||||||
<< boost::errinfo_api_function("pipe2")
|
|
||||||
<< boost::errinfo_errno(errno));
|
|
||||||
}
|
|
||||||
# else /* HAVE_PIPE2 */
|
|
||||||
if (pipe(l_EventFDs[tid]) < 0) {
|
|
||||||
BOOST_THROW_EXCEPTION(posix_error()
|
|
||||||
<< boost::errinfo_api_function("pipe")
|
|
||||||
<< boost::errinfo_errno(errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
Utility::SetCloExec(l_EventFDs[tid][0]);
|
|
||||||
Utility::SetCloExec(l_EventFDs[tid][1]);
|
|
||||||
# endif /* HAVE_PIPE2 */
|
# endif /* HAVE_PIPE2 */
|
||||||
|
if (pipe(l_EventFDs[tid]) < 0) {
|
||||||
|
BOOST_THROW_EXCEPTION(posix_error()
|
||||||
|
<< boost::errinfo_api_function("pipe")
|
||||||
|
<< boost::errinfo_errno(errno));
|
||||||
|
}
|
||||||
|
|
||||||
Utility::SetNonBlocking(l_EventFDs[tid][0]);
|
Utility::SetCloExec(l_EventFDs[tid][0]);
|
||||||
Utility::SetNonBlocking(l_EventFDs[tid][1]);
|
Utility::SetCloExec(l_EventFDs[tid][1]);
|
||||||
|
# ifdef HAVE_PIPE2
|
||||||
|
} else {
|
||||||
|
BOOST_THROW_EXCEPTION(posix_error()
|
||||||
|
<< boost::errinfo_api_function("pipe2")
|
||||||
|
<< boost::errinfo_errno(errno));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif /* HAVE_PIPE2 */
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -444,19 +445,23 @@ void Process::Run(const boost::function<void(const ProcessResult&)>& callback)
|
|||||||
|
|
||||||
#ifdef HAVE_PIPE2
|
#ifdef HAVE_PIPE2
|
||||||
if (pipe2(fds, O_CLOEXEC) < 0) {
|
if (pipe2(fds, O_CLOEXEC) < 0) {
|
||||||
BOOST_THROW_EXCEPTION(posix_error()
|
if (errno == ENOSYS) {
|
||||||
<< boost::errinfo_api_function("pipe2")
|
#endif /* HAVE_PIPE2 */
|
||||||
<< boost::errinfo_errno(errno));
|
if (pipe(fds) < 0) {
|
||||||
}
|
BOOST_THROW_EXCEPTION(posix_error()
|
||||||
#else /* HAVE_PIPE2 */
|
<< boost::errinfo_api_function("pipe")
|
||||||
if (pipe(fds) < 0) {
|
<< boost::errinfo_errno(errno));
|
||||||
BOOST_THROW_EXCEPTION(posix_error()
|
}
|
||||||
<< boost::errinfo_api_function("pipe")
|
|
||||||
<< boost::errinfo_errno(errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
Utility::SetCloExec(fds[0]);
|
Utility::SetCloExec(fds[0]);
|
||||||
Utility::SetCloExec(fds[1]);
|
Utility::SetCloExec(fds[1]);
|
||||||
|
#ifdef HAVE_PIPE2
|
||||||
|
} else {
|
||||||
|
BOOST_THROW_EXCEPTION(posix_error()
|
||||||
|
<< boost::errinfo_api_function("pipe2")
|
||||||
|
<< boost::errinfo_errno(errno));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif /* HAVE_PIPE2 */
|
#endif /* HAVE_PIPE2 */
|
||||||
|
|
||||||
// build argv
|
// build argv
|
||||||
|
Loading…
x
Reference in New Issue
Block a user