test_console: React on SIGINT

Correctly terminate the application on SIGINT so the CRTC gets reset.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
David Herrmann 2011-12-02 14:35:33 +01:00
parent ca409fb0c5
commit 41c56410ee

View File

@ -45,8 +45,10 @@
#include <errno.h>
#include <inttypes.h>
#include <locale.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <GL/gl.h>
@ -54,6 +56,13 @@
#include "console.h"
#include "output.h"
static volatile sig_atomic_t terminate;
static void sig_term(int sig)
{
terminate = 1;
}
static int map_outputs(struct kmscon_compositor *comp,
struct kmscon_console *con)
{
@ -82,7 +91,6 @@ static int map_outputs(struct kmscon_compositor *comp,
iter, ret);
continue;
}
sleep(1);
}
return 0;
@ -134,12 +142,14 @@ static int run_console(struct kmscon_compositor *comp)
goto err_unref;
}
while (1) {
while (!terminate) {
kmscon_console_draw(con);
map_outputs(comp, con);
usleep(10000);
}
printf("Terminating due to user request\n");
err_unref:
kmscon_console_unref(con);
return ret;
@ -149,9 +159,15 @@ int main(int argc, char **argv)
{
struct kmscon_compositor *comp;
int ret;
struct sigaction sig;
setlocale(LC_ALL, "");
memset(&sig, 0, sizeof(sig));
sig.sa_handler = sig_term;
sigaction(SIGTERM, &sig, NULL);
sigaction(SIGINT, &sig, NULL);
ret = kmscon_compositor_new(&comp);
if (ret) {
printf("Cannot create compositor: %d\n", ret);