[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