[pkg-fso-commits] [SCM] Automatic Display Manager branch, bug540201, updated. debian/0.6-1-45-ge1626ac

Enrico Zini enrico at enricozini.org
Wed Jul 6 13:37:00 UTC 2011


The following commit has been merged in the bug540201 branch:
commit ee24a9d4f17f9dd95ea0415e93f73ec96f70c23d
Author: Enrico Zini <enrico at enricozini.org>
Date:   Wed Jul 6 15:01:27 2011 +0200

    Do not set DISPLAY on xserver, as it inteferes with what is needed by Xnest

diff --git a/dm.c b/dm.c
index 0c25874..f23ed6c 100644
--- a/dm.c
+++ b/dm.c
@@ -97,6 +97,7 @@ int nodm_display_manager_stop(struct nodm_display_manager* dm)
 
 int nodm_display_manager_wait(struct nodm_display_manager* dm, int* session_status)
 {
+    *session_status = -1;
     while (true)
     {
         // Wait for one child to exit
diff --git a/test-xsession.c b/test-xsession.c
index 149814f..d0bbb08 100644
--- a/test-xsession.c
+++ b/test-xsession.c
@@ -52,20 +52,27 @@ int test_session_x_killer(struct nodm_xsession_child* s)
     return E_SUCCESS;
 }
 
+void setup_dm(struct nodm_display_manager* dm, const char* xcmdline)
+{
+    nodm_display_manager_init(dm);
+    ensure_succeeds(nodm_display_manager_parse_xcmdline(dm, xcmdline));
+    dm->session.conf_use_pam = false;
+    dm->session.conf_cleanup_xse = false;
+    dm->session.conf_run_as[0] = 0;
+    dm->vt.conf_initial_vt = -1;
+}
+
 // X server starts, X session quits with success
 void test_trivial_session()
 {
+    log_verbose("test_trivial_session");
     struct nodm_display_manager dm;
-    nodm_display_manager_init(&dm);
-    ensure_succeeds(nodm_display_manager_parse_xcmdline(&dm, "/usr/bin/Xnest :1 -geometry 1x1+0+0"));
-    dm.session.conf_use_pam = false;
-    dm.session.conf_cleanup_xse = false;
-    dm.session.conf_run_as[0] = 0;
-    dm.vt.conf_initial_vt = -1;
+    setup_dm(&dm, "/usr/bin/Xnest :1 -geometry 1x1+0+0");
     dm.session.child_body = test_session;
+
     ensure_succeeds(nodm_display_manager_start(&dm));
     int sstatus;
-    ensure_succeeds(nodm_display_manager_wait(&dm, &sstatus));
+    ensure_equali(nodm_display_manager_wait(&dm, &sstatus), E_SESSION_DIED);
     ensure_equali(sstatus, E_SUCCESS);
     ensure_succeeds(nodm_display_manager_stop(&dm));
     nodm_display_manager_cleanup(&dm);
@@ -74,13 +81,9 @@ void test_trivial_session()
 // X server does not start
 void test_bad_x_server()
 {
+    log_verbose("test_bad_x_server");
     struct nodm_display_manager dm;
-    nodm_display_manager_init(&dm);
-    ensure_succeeds(nodm_display_manager_parse_xcmdline(&dm, "/bin/false :1 -geometry 1x1+0+0"));
-    dm.session.conf_use_pam = false;
-    dm.session.conf_cleanup_xse = false;
-    dm.session.conf_run_as[0] = 0;
-    dm.vt.conf_initial_vt = -1;
+    setup_dm(&dm, "/bin/false :1 -geometry 1x1+0+0");
     dm.session.child_body = test_session;
 
     ensure_equali(nodm_display_manager_start(&dm), E_X_SERVER_DIED);
@@ -99,19 +102,18 @@ void test_bad_x_server()
 // X server starts, X session quits with error
 void test_failing_x_session()
 {
+    log_verbose("test_failing_x_session");
     struct nodm_display_manager dm;
-    nodm_display_manager_init(&dm);
-    ensure_succeeds(nodm_display_manager_parse_xcmdline(&dm, "/usr/bin/Xnest :1 -geometry 1x1+0+0"));
-    dm.session.conf_use_pam = false;
-    dm.session.conf_cleanup_xse = false;
-    dm.session.conf_run_as[0] = 0;
-    dm.vt.conf_initial_vt = -1;
+    setup_dm(&dm, "/usr/bin/Xnest :1 -geometry 1x1+0+0");
     dm.session.child_body = test_session_bad;
 
     ensure_succeeds(nodm_display_manager_start(&dm));
+
     int sstatus;
-    ensure_succeeds(nodm_display_manager_wait(&dm, &sstatus));
-    ensure_equali(sstatus, E_SUCCESS);
+    ensure_equali(nodm_display_manager_wait(&dm, &sstatus), E_SESSION_DIED);
+    ensure_equali(WIFEXITED(sstatus) ? 1 : 0, 1);
+    ensure_equali(WEXITSTATUS(sstatus), E_USAGE);
+
     ensure_succeeds(nodm_display_manager_stop(&dm));
     nodm_display_manager_cleanup(&dm);
 }
@@ -119,26 +121,24 @@ void test_failing_x_session()
 // X server starts, X session starts, then server dies
 void test_dying_x_server()
 {
+    log_verbose("test_dying_x_server");
     struct nodm_display_manager dm;
-    nodm_display_manager_init(&dm);
-    ensure_succeeds(nodm_display_manager_parse_xcmdline(&dm, "/usr/bin/Xnest :1 -geometry 1x1+0+0"));
-    dm.session.conf_use_pam = false;
-    dm.session.conf_cleanup_xse = false;
-    dm.session.conf_run_as[0] = 0;
-    dm.vt.conf_initial_vt = -1;
+    setup_dm(&dm, "/usr/bin/Xnest :1 -geometry 1x1+0+0");
     dm.session.child_body = test_session_x_killer;
 
     ensure_succeeds(nodm_display_manager_start(&dm));
+
     int sstatus;
-    ensure_succeeds(nodm_display_manager_wait(&dm, &sstatus));
-    ensure_equali(sstatus, E_SUCCESS);
+    ensure_equali(nodm_display_manager_wait(&dm, &sstatus), E_X_SERVER_DIED);
+    ensure_equali(sstatus, -1);
+
     ensure_succeeds(nodm_display_manager_stop(&dm));
     nodm_display_manager_cleanup(&dm);
 }
 
 int main(int argc, char* argv[])
 {
-    test_start("test-xsession", false);
+    test_start("test-xsession", true);
 
     test_trivial_session();
     test_bad_x_server();
diff --git a/xserver.c b/xserver.c
index a67ede2..f3d5c28 100644
--- a/xserver.c
+++ b/xserver.c
@@ -203,14 +203,6 @@ static int xserver_start(struct nodm_xserver* srv, unsigned timeout_sec)
 
     log_verbose("X is ready to accept connections");
 
-    // Set the DISPLAY env var
-    if (setenv("DISPLAY", srv->name, 1) == -1)
-    {
-        log_err("setenv DISPLAY=%s failed: %m", srv->name);
-        return_code = E_OS_ERROR;
-        goto cleanup;
-    }
-
 cleanup:
     // Kill the X server if an error happened
     if (child > 0 && return_code != E_SUCCESS)
@@ -233,7 +225,6 @@ static int xserver_stop(struct nodm_xserver* srv)
     }
     // TODO: wait
     srv->pid = -1;
-    unsetenv("DISPLAY");
 
     if (srv->windowpath != NULL)
     {

-- 
Automatic Display Manager



More information about the pkg-fso-commits mailing list