aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar wm4 <wm4@nowhere>2015-04-15 22:43:02 +0200
committerGravatar wm4 <wm4@nowhere>2015-04-15 22:43:02 +0200
commitd55c41501f3500d5d301f3cb4ea5c40816f9baae (patch)
treecc1d83e6b2b5d8f6c8d2f126907dca9f61a374d3
parent95c1487c93b2193680c5e0f064bbb8fb3b71ff2c (diff)
subprocess: move implementation for deatched subprocesses
-rw-r--r--old-makefile1
-rw-r--r--osdep/subprocess.c57
-rw-r--r--osdep/subprocess.h3
-rw-r--r--player/command.c35
-rw-r--r--wscript_build.py1
5 files changed, 63 insertions, 34 deletions
diff --git a/old-makefile b/old-makefile
index 2ec33455d3..876c1fe0d7 100644
--- a/old-makefile
+++ b/old-makefile
@@ -196,6 +196,7 @@ SOURCES = audio/audio.c \
options/path.c \
osdep/io.c \
osdep/semaphore_osx.c \
+ osdep/subprocess.c \
osdep/subprocess-posix.c \
osdep/terminal-unix.c \
osdep/timer.c \
diff --git a/osdep/subprocess.c b/osdep/subprocess.c
new file mode 100644
index 0000000000..84a1b52fe6
--- /dev/null
+++ b/osdep/subprocess.c
@@ -0,0 +1,57 @@
+/*
+ * This file is part of mpv.
+ *
+ * mpv is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * mpv is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with mpv. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <pthread.h>
+
+#include "common/common.h"
+#include "common/msg.h"
+#include "common/msg_control.h"
+
+#include "subprocess.h"
+
+struct subprocess_args {
+ struct mp_log *log;
+ char **args;
+};
+
+static void *run_subprocess(void *ptr)
+{
+ struct subprocess_args *p = ptr;
+ pthread_detach(pthread_self());
+
+ mp_msg_flush_status_line(p->log);
+
+ char *err = NULL;
+ if (mp_subprocess(p->args, NULL, NULL, NULL, NULL, &err) < 0)
+ mp_err(p->log, "Running subprocess failed: %s\n", err);
+
+ talloc_free(p);
+ return NULL;
+}
+
+void mp_subprocess_detached(struct mp_log *log, char **args)
+{
+ struct subprocess_args *p = talloc_zero(NULL, struct subprocess_args);
+ p->log = mp_log_new(p, log, NULL);
+ int num_args = 0;
+ for (int n = 0; args[n]; n++)
+ MP_TARRAY_APPEND(p, p->args, num_args, talloc_strdup(p, args[n]));
+ MP_TARRAY_APPEND(p, p->args, num_args, NULL);
+ pthread_t thread;
+ if (pthread_create(&thread, NULL, run_subprocess, p))
+ talloc_free(p);
+}
diff --git a/osdep/subprocess.h b/osdep/subprocess.h
index 09c07da981..1bd5afe1f8 100644
--- a/osdep/subprocess.h
+++ b/osdep/subprocess.h
@@ -29,4 +29,7 @@ int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx,
subprocess_read_cb on_stdout, subprocess_read_cb on_stderr,
char **error);
+struct mp_log;
+void mp_subprocess_detached(struct mp_log *log, char **args);
+
#endif
diff --git a/player/command.c b/player/command.c
index 88b3164436..6db3b2100b 100644
--- a/player/command.c
+++ b/player/command.c
@@ -3960,39 +3960,6 @@ static void overlay_uninit(struct MPContext *mpctx)
osd_set_external2(mpctx->osd, NULL);
}
-struct subprocess_args {
- struct mp_log *log;
- char **args;
-};
-
-static void *run_subprocess(void *ptr)
-{
- struct subprocess_args *p = ptr;
- pthread_detach(pthread_self());
-
- mp_msg_flush_status_line(p->log);
-
- char *err = NULL;
- if (mp_subprocess(p->args, NULL, NULL, NULL, NULL, &err) < 0)
- mp_err(p->log, "Running subprocess failed: %s\n", err);
-
- talloc_free(p);
- return NULL;
-}
-
-static void subprocess_detached(struct mp_log *log, char **args)
-{
- struct subprocess_args *p = talloc_zero(NULL, struct subprocess_args);
- p->log = mp_log_new(p, log, NULL);
- int num_args = 0;
- for (int n = 0; args[n]; n++)
- MP_TARRAY_APPEND(p, p->args, num_args, talloc_strdup(p, args[n]));
- MP_TARRAY_APPEND(p, p->args, num_args, NULL);
- pthread_t thread;
- if (pthread_create(&thread, NULL, run_subprocess, p))
- talloc_free(p);
-}
-
struct cycle_counter {
char **args;
int counter;
@@ -4599,7 +4566,7 @@ int run_command(MPContext *mpctx, mp_cmd_t *cmd)
char *args[MP_CMD_MAX_ARGS + 1] = {0};
for (int n = 0; n < cmd->nargs; n++)
args[n] = cmd->args[n].v.s;
- subprocess_detached(mpctx->log, args);
+ mp_subprocess_detached(mpctx->log, args);
break;
}
diff --git a/wscript_build.py b/wscript_build.py
index 4478725596..e13a78107c 100644
--- a/wscript_build.py
+++ b/wscript_build.py
@@ -375,6 +375,7 @@ def build(ctx):
( "osdep/macosx_application.m", "cocoa-application" ),
( "osdep/macosx_events.m", "cocoa" ),
( "osdep/semaphore_osx.c" ),
+ ( "osdep/subprocess.c" ),
( "osdep/subprocess-posix.c", "posix-spawn" ),
( "osdep/subprocess-win.c", "os-win32" ),
( "osdep/path-macosx.m", "cocoa" ),