raster pushed a commit to branch enlightenment-0.24.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=5d69d2be2e200dd81c0a79062cc08f59ca6c5988

commit 5d69d2be2e200dd81c0a79062cc08f59ca6c5988
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Sun Jul 12 09:52:51 2020 +0100

    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.
---
 src/bin/e_start_main.c | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/bin/e_start_main.c b/src/bin/e_start_main.c
index b2c439455..abe4ce77c 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)
           {

-- 


Reply via email to