Add a way to disable pipes for the Wine host

For some reason ujam plugins (and other plugins made with the Gorilla
Engine, like the LoopCloud plugins) will throw a `JS_EXEC_FAILED` error
when trying to load the plugin while either of the STDOUT or STDERR
streams is pointing to a pipe. Simply redirecting the output to a file
fixes this. By default we'll write the output to
`<temporary_directory>/yabridge-plugin-output.log`, but you can also set
the new `disable_pipes` option to `"/dev/null"` to completely throw away
all output.

This addresses #47.
This commit is contained in:
Robbert van der Helm
2021-05-18 17:55:39 +02:00
parent 99428ba28e
commit 95badeb1bc
6 changed files with 128 additions and 41 deletions
+11 -5
View File
@@ -72,26 +72,27 @@ class PluginBridge {
? std::unique_ptr<HostProcess>(std::make_unique<GroupHost>(
io_context,
generic_logger,
config,
sockets,
info,
HostRequest{
.plugin_type = plugin_type,
.plugin_path = info.windows_plugin_path.string(),
.endpoint_base_dir = sockets.base_dir.string(),
.parent_pid = getpid()},
sockets,
*config.group))
.parent_pid = getpid()}))
: std::unique_ptr<HostProcess>(
std::make_unique<IndividualHost>(
io_context,
generic_logger,
config,
sockets,
info,
HostRequest{
.plugin_type = plugin_type,
.plugin_path =
info.windows_plugin_path.string(),
.endpoint_base_dir = sockets.base_dir.string(),
.parent_pid = getpid()},
sockets))),
.parent_pid = getpid()}))),
has_realtime_priority(has_realtime_priority_promise.get_future()),
wine_io_handler([&]() {
// We no longer run this thread with realtime scheduling because
@@ -177,6 +178,11 @@ class PluginBridge {
init_msg << "other options: ";
std::vector<std::string> other_options;
if (config.disable_pipes) {
other_options.push_back(
"hack: pipes disabled, plugin output will go to \"" +
config.disable_pipes->string() + "\"");
}
if (config.editor_double_embed) {
other_options.push_back("editor: double embed");
}