mirror of
https://github.com/yuzu-emu/AppImageKit-checkrt.git
synced 2024-12-25 02:55:35 +00:00
Fork when starting application and wait for process to complete
This allows parent don't be lost when, e.g., application restarts
This commit is contained in:
parent
a2866fd043
commit
07e851fcc8
|
@ -1,17 +1,38 @@
|
|||
--- a/AppRun.c
|
||||
+++ b/AppRun.c
|
||||
@@ -164,6 +164,10 @@
|
||||
char *old_env;
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <dirent.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
+#include <wait.h>
|
||||
|
||||
#define die(...) \
|
||||
do { \
|
||||
@@ -102,6 +103,11 @@
|
||||
line[n] = '\0';
|
||||
}
|
||||
|
||||
+ int pid;
|
||||
+ if ((pid = fork()) == -1) {
|
||||
+ int error = errno;
|
||||
+ die("fork() failed: %s\n", strerror(error));
|
||||
+ } else if (pid == 0) {
|
||||
// count arguments
|
||||
char* arg = exe;
|
||||
int argcount = 0;
|
||||
@@ -165,6 +171,11 @@
|
||||
size_t length;
|
||||
const char *format;
|
||||
|
||||
+ checkrt(usr_in_appdir);
|
||||
+
|
||||
+ if (optional_ld_preload)
|
||||
+ putenv(optional_ld_preload);
|
||||
|
||||
+
|
||||
/* https://docs.python.org/2/using/cmdline.html#envvar-PYTHONHOME */
|
||||
SET_NEW_ENV(new_pythonhome, appdir_s, "PYTHONHOME=%s/usr/", appdir);
|
||||
@@ -172,7 +176,7 @@
|
||||
|
||||
@@ -172,7 +183,7 @@
|
||||
SET_NEW_ENV(new_path, appdir_s*5 + strlen(old_env), "PATH=%s/usr/bin/:%s/usr/sbin/:%s/usr/games/:%s/bin/:%s/sbin/:%s", appdir, appdir, appdir, appdir, appdir, old_env);
|
||||
|
||||
old_env = getenv("LD_LIBRARY_PATH") ?: "";
|
||||
|
@ -20,13 +41,41 @@
|
|||
|
||||
old_env = getenv("PYTHONPATH") ?: "";
|
||||
SET_NEW_ENV(new_pythonpath, appdir_s + strlen(old_env), "PYTHONPATH=%s/usr/share/pyshared/:%s", appdir, old_env);
|
||||
@@ -201,6 +205,9 @@
|
||||
if (ret == -1)
|
||||
die("Error executing '%s': %s\n", exe, strerror(error));
|
||||
@@ -197,15 +208,12 @@
|
||||
putenv("PYTHONDONTWRITEBYTECODE=1");
|
||||
|
||||
/* Run */
|
||||
- ret = execvp(exe, outargptrs);
|
||||
-
|
||||
- int error = errno;
|
||||
+ execvp(exe, outargptrs);
|
||||
|
||||
- if (ret == -1)
|
||||
- die("Error executing '%s': %s\n", exe, strerror(error));
|
||||
+ free(optional_ld_library_path);
|
||||
+ if (optional_ld_preload)
|
||||
+ free(optional_ld_preload);
|
||||
free(line);
|
||||
free(desktop_file);
|
||||
|
||||
- free(line);
|
||||
- free(desktop_file);
|
||||
free(usr_in_appdir);
|
||||
free(new_pythonhome);
|
||||
free(new_path);
|
||||
@@ -215,5 +223,16 @@
|
||||
free(new_perllib);
|
||||
free(new_gsettings_schema_dir);
|
||||
free(new_qt_plugin_path);
|
||||
- return 0;
|
||||
+
|
||||
+ int error = errno;
|
||||
+ die("Error executing '%s': %s\n", exe, strerror(error));
|
||||
+ }
|
||||
+
|
||||
+ int status = 0;
|
||||
+ int rv = waitpid(pid, &status, 0);
|
||||
+ status = rv > 0 && WIFEXITED (status) ? WEXITSTATUS (status) : 1;
|
||||
+
|
||||
+ free(line);
|
||||
+ free(desktop_file);
|
||||
+ return status;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue