summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-07-12 09:52:51 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-07-14 14:00:09 +0100
commit5d69d2be2e200dd81c0a79062cc08f59ca6c5988 (patch)
tree2add5fe01927f3c0f1b0f7eb0b27d66b16e10756
parent1e3fcd263e69bfd9ddbeb944133e0d5542fdce43 (diff)
downloadenlightenment-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.c23
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)
{