boost::process::spawn() sets SIGINT to SIGIGN, which collides with boost::process waiting for a child to finish!
https://jmmv.dev/2008/10/boostprocess-and-sigchld.html Thus reset the SIGINT to its default, so that posix waitpid() and similar continue to work. Fixes Crash on Eject in Second Instance on macOS #5507
This commit is contained in:
parent
2ad4447035
commit
71808dc006
@ -17,6 +17,7 @@
|
|||||||
// For starting another PrusaSlicer instance on OSX.
|
// For starting another PrusaSlicer instance on OSX.
|
||||||
// Fails to compile on Windows on the build server.
|
// Fails to compile on Windows on the build server.
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
#include <signal.h>
|
||||||
#include <boost/process/spawn.hpp>
|
#include <boost/process/spawn.hpp>
|
||||||
#include <boost/process/args.hpp>
|
#include <boost/process/args.hpp>
|
||||||
#endif
|
#endif
|
||||||
@ -78,6 +79,11 @@ static void start_new_slicer_or_gcodeviewer(const NewSlicerInstanceType instance
|
|||||||
if (instance_type == NewSlicerInstanceType::Slicer && single_instance)
|
if (instance_type == NewSlicerInstanceType::Slicer && single_instance)
|
||||||
args.emplace_back("--single-instance");
|
args.emplace_back("--single-instance");
|
||||||
boost::process::spawn(bin_path, args);
|
boost::process::spawn(bin_path, args);
|
||||||
|
// boost::process::spawn() sets SIGINT to SIGIGN, which collides with boost::process waiting for a child to finish!
|
||||||
|
// https://jmmv.dev/2008/10/boostprocess-and-sigchld.html
|
||||||
|
// Thus reset the SIGINT to its default, so that posix waitpid() and similar continue to work.
|
||||||
|
// Fixes Crash on Eject in Second Instance on macOS #5507
|
||||||
|
signal(SIGINT, SIG_DFL);
|
||||||
}
|
}
|
||||||
catch (const std::exception& ex) {
|
catch (const std::exception& ex) {
|
||||||
BOOST_LOG_TRIVIAL(error) << "Failed to spawn a new slicer \"" << bin_path.string() << "\": " << ex.what();
|
BOOST_LOG_TRIVIAL(error) << "Failed to spawn a new slicer \"" << bin_path.string() << "\": " << ex.what();
|
||||||
|
Loading…
Reference in New Issue
Block a user