When no screens are found, don’t hog the CPU. Also, wait longer for screens (10 seconds).

Instead of just going on, i3 will exit cleanly now, putting an
appropriate message into the logfile.
This commit is contained in:
Michael Stapelberg 2009-12-07 16:31:49 +01:00
parent 13231e13ab
commit 1a53cc067b

View File

@ -188,7 +188,7 @@ static void query_screens(xcb_connection_t *conn, struct screens_head *screenlis
* which the X server does not return any screens, such as when rotating * which the X server does not return any screens, such as when rotating
* screens), but not longer than 5 seconds (strictly speaking, only four * screens), but not longer than 5 seconds (strictly speaking, only four
* seconds of trying are guaranteed due to the 1-second-resolution) */ * seconds of trying are guaranteed due to the 1-second-resolution) */
while ((time(NULL) - before_trying) < 5) { while ((time(NULL) - before_trying) < 10) {
reply = xcb_xinerama_query_screens_reply(conn, xcb_xinerama_query_screens_unchecked(conn), NULL); reply = xcb_xinerama_query_screens_reply(conn, xcb_xinerama_query_screens_unchecked(conn), NULL);
if (!reply) { if (!reply) {
LOG("Couldn't get Xinerama screens\n"); LOG("Couldn't get Xinerama screens\n");
@ -227,11 +227,19 @@ static void query_screens(xcb_connection_t *conn, struct screens_head *screenlis
if (num_screens == 0) { if (num_screens == 0) {
LOG("No screens found. This is weird. Trying again...\n"); LOG("No screens found. This is weird. Trying again...\n");
/* Give the scheduler a chance to do something else
* and dont hog the CPU */
usleep(250);
continue; continue;
} }
break; break;
} }
if (num_screens == 0) {
LOG("No screens found for 10 seconds. Please fix your setup. i3 will exit now.\n");
exit(0);
}
} }
/* /*