// Make sure we do not outlive our parent:
sigset_t mask;
sigemptyset (&mask);
- if (sigprocmask(SIG_SETMASK, &mask, nullptr) < 0)
- throw simgrid::xbt::errno_error("Could not unblock signals");
- if (prctl(PR_SET_PDEATHSIG, SIGHUP) != 0)
- throw simgrid::xbt::errno_error("Could not PR_SET_PDEATHSIG");
+ xbt_assert(sigprocmask(SIG_SETMASK, &mask, nullptr) >= 0, "Could not unblock signals");
+ xbt_assert(prctl(PR_SET_PDEATHSIG, SIGHUP) == 0, "Could not PR_SET_PDEATHSIG");
#endif
- int res;
-
// Remove CLOEXEC in order to pass the socket to the exec-ed program:
int fdflags = fcntl(socket, F_GETFD, 0);
- if (fdflags == -1 || fcntl(socket, F_SETFD, fdflags & ~FD_CLOEXEC) == -1)
- throw simgrid::xbt::errno_error("Could not remove CLOEXEC for socket");
+ xbt_assert(fdflags != -1 && fcntl(socket, F_SETFD, fdflags & ~FD_CLOEXEC) != -1,
+ "Could not remove CLOEXEC for socket");
// Set environment:
setenv(MC_ENV_VARIABLE, "1", 1);
setenv("LC_BIND_NOW", "1", 1);
char buffer[64];
- res = std::snprintf(buffer, sizeof(buffer), "%i", socket);
- if ((size_t) res >= sizeof(buffer) || res == -1)
- std::abort();
+ int res = std::snprintf(buffer, sizeof(buffer), "%i", socket);
+ xbt_assert((size_t)res < sizeof(buffer) && res != -1);
setenv(MC_ENV_SOCKET_FD, buffer, 1);
}
pid_t do_fork(F code)
{
pid_t pid = fork();
- if (pid < 0)
- throw simgrid::xbt::errno_error("Could not fork model-checked process");
+ xbt_assert(pid >= 0, "Could not fork model-checked process");
if (pid != 0)
return pid;
// Child-process:
- try {
- code();
- _exit(EXIT_SUCCESS);
- }
- catch(...) {
- // The callback should catch exceptions:
- std::terminate();
- }
+ code();
+ _exit(EXIT_SUCCESS);
}
Session::Session(const std::function<void()>& code)