[Intel-gfx] [PATCH i-g-t] overlay/intel-gpu-overlay
marius.c.vlad at intel.com
marius.c.vlad at intel.com
Wed Nov 18 04:40:29 PST 2015
From: Marius Vlad <marius.c.vlad at intel.com>
Use sigaction() instead of signal() and add SIGINT, SIGTERM to close
the overlay window. With this change the overlay window will be
destroyed.
Signed-off-by: Marius Vlad <marius.c.vlad at intel.com>
---
overlay/overlay.c | 42 ++++++++++++++++++++++++++++++++++++------
1 file changed, 36 insertions(+), 6 deletions(-)
diff --git a/overlay/overlay.c b/overlay/overlay.c
index 3c0dbb4..48ba67c 100644
--- a/overlay/overlay.c
+++ b/overlay/overlay.c
@@ -804,11 +804,19 @@ static void show_gem_objects(struct overlay_context *ctx, struct overlay_gem_obj
static int take_snapshot;
-static void signal_snapshot(int sig)
+static void
+signal_snapshot(int sig, siginfo_t *si, void *__unused)
{
take_snapshot = sig;
}
+static void
+signal_x11_destroy(int sig, siginfo_t *si, void *__unused)
+{
+ x11_overlay_stop();
+ exit(EXIT_SUCCESS);
+}
+
static int get_sample_period(struct config *config)
{
const char *value;
@@ -854,6 +862,7 @@ int main(int argc, char **argv)
};
struct overlay_context ctx;
struct config config;
+ struct sigaction sa;
int index, sample_period;
int daemonize = 1, renice = 0;
int i;
@@ -898,14 +907,22 @@ int main(int argc, char **argv)
ctx.width = 640;
ctx.height = 236;
ctx.surface = NULL;
- if (ctx.surface == NULL)
+
+ if (ctx.surface == NULL) {
ctx.surface = x11_overlay_create(&config, &ctx.width, &ctx.height);
- if (ctx.surface == NULL)
+ }
+ if (ctx.surface == NULL) {
+ fprintf(stderr, "Failed to create X11 overlay.\n");
ctx.surface = x11_window_create(&config, &ctx.width, &ctx.height);
- if (ctx.surface == NULL)
+ }
+ if (ctx.surface == NULL) {
+ fprintf(stderr, "Failed to create X11 window.\n");
ctx.surface = kms_overlay_create(&config, &ctx.width, &ctx.height);
- if (ctx.surface == NULL)
+ }
+ if (ctx.surface == NULL) {
+ fprintf(stderr, "Failed to create KMS overlay.\n");
return ENXIO;
+ }
if (daemonize && daemon(0, 0))
return EINVAL;
@@ -913,7 +930,20 @@ int main(int argc, char **argv)
if (renice && (nice(renice) == -1))
fprintf(stderr, "Could not renice: %s\n", strerror(errno));
- signal(SIGUSR1, signal_snapshot);
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_sigaction = &signal_snapshot;
+
+ if (sigaction(SIGUSR1, &sa, NULL) == -1) {
+ x11_overlay_stop();
+ return EXIT_FAILURE;
+ }
+
+ sa.sa_sigaction = &signal_x11_destroy;
+ if (sigaction(SIGINT | SIGTERM, &sa, NULL) == -1) {
+ x11_overlay_stop();
+ return EXIT_FAILURE;
+ }
debugfs_init();
--
2.6.2
More information about the Intel-gfx
mailing list