diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2020-07-12 09:52:51 +0100 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2020-07-14 14:00:09 +0100 |
commit | 5d69d2be2e200dd81c0a79062cc08f59ca6c5988 (patch) | |
tree | 2add5fe01927f3c0f1b0f7eb0b27d66b16e10756 | |
parent | 1e3fcd263e69bfd9ddbeb944133e0d5542fdce43 (diff) | |
download | enlightenment-5d69d2be2e200dd81c0a79062cc08f59ca6c5988.tar.gz |
e start - handle exit code for restart AND exit choices because of lib
so library somewhere is causing an exit(1) sometimes... this means i
lose my entire desktop. this is not e doing it... so it's some
dependency bug and this shouldn't happen - but it does and it causes
the entire login session to be losst, so treat an exit code ofr 0 as a
clean exit, and anything else as a bug to be handled like segfaults
etc. and restart e.
-rw-r--r-- | src/bin/e_start_main.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/bin/e_start_main.c b/src/bin/e_start_main.c index b2c4394558..abe4ce77c9 100644 --- a/src/bin/e_start_main.c +++ b/src/bin/e_start_main.c @@ -795,7 +795,10 @@ not_done: if (result == child) { - if (WIFSTOPPED(status) && !stop_ptrace) + printf("WIFSTOPPED=%i WIFEXITED=%i WEXITSTATUS=%i stop_ptrace=%i\n", + WIFSTOPPED(status), WIFEXITED(status), + WEXITSTATUS(status), stop_ptrace); + if (WIFSTOPPED(status) && (!stop_ptrace)) { char *backtrace_str = NULL; @@ -836,14 +839,28 @@ not_done: if (getenv("DISPLAY")) kill(child, SIGKILL); if (WEXITSTATUS(r) == 1) restart = EINA_FALSE; } + else if (!WIFEXITED(status) || (stop_ptrace)) + { + restart = EINA_TRUE; + done = EINA_TRUE; + } else if (WEXITSTATUS(status) == 111) { putenv("E_RESTART_OK=1"); restart = EINA_TRUE; done = EINA_TRUE; } - else if (!WIFEXITED(status) || stop_ptrace) - done = EINA_TRUE; + else if (WEXITSTATUS(status) == 0) + { + restart = EINA_FALSE; + done = EINA_TRUE; + } + else + { + printf("Invalid exit from enlightenment: code=%i\n", WEXITSTATUS(status)); + restart = EINA_TRUE; + done = EINA_TRUE; + } } else if (result == -1) { |