summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-06-29 15:25:19 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2014-06-29 15:30:03 +0100
commita8b0ba0ed5f27e0d671b650d6f4bfe2fd86a0f3f (patch)
tree74dcc49607b8baabd63f59c56d237417af20245a /tools
parent81889664851e3a2218d1ac5d39ebd2bd3b6a4954 (diff)
intel-virtual-output: Cleanup singleton on failure
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tools')
-rw-r--r--tools/virtual.c42
1 files changed, 28 insertions, 14 deletions
diff --git a/tools/virtual.c b/tools/virtual.c
index ad96a9bb..5bc050b6 100644
--- a/tools/virtual.c
+++ b/tools/virtual.c
@@ -3205,7 +3205,8 @@ int main(int argc, char **argv)
if (ret) {
fprintf(stderr, "Unable to connect to \"%s\".\n", src_name ?: getenv("DISPLAY") ?:
"<unspecified>, set either the DISPLAY environment variable or pass -d <display name> on the commandline");
- return -ret;
+ ret = -ret;
+ goto out;
}
if (singleton) {
@@ -3214,8 +3215,10 @@ int main(int argc, char **argv)
DBG(X11, ("%s: pinging singleton\n", DisplayString(ctx.display->dpy)));
ret = first_display_send_command(&ctx, 2000, "P");
if (ret) {
- if (ret != -ETIME)
- return -ret;
+ if (ret != -ETIME) {
+ ret = -ret;
+ goto out;
+ }
DBG(X11, ("No reply from singleton; assuming control\n"));
} else {
DBG(X11, ("%s: singleton active, sending open commands\n", DisplayString(ctx.display->dpy)));
@@ -3247,21 +3250,25 @@ int main(int argc, char **argv)
} else
open++;
}
- return open || !fail ? 0 : ECONNREFUSED;
+ ret = open || !fail ? 0 : ECONNREFUSED;
+ goto out;
}
}
ret = first_display_register_as_singleton(&ctx);
if (ret)
- return ret;
+ goto out;
}
ret = display_init_damage(ctx.display);
- if (ret)
- return ret;
+ if (ret) {
+ context_cleanup(&ctx);
+ goto out;
+ }
if ((ctx.display->rr_event | ctx.display->rr_error) == 0) {
fprintf(stderr, "RandR extension not supported by %s\n", DisplayString(ctx.display->dpy));
- return EINVAL;
+ ret = EINVAL;
+ goto out;
}
XRRSelectInput(ctx.display->dpy, ctx.display->root, RRScreenChangeNotifyMask);
XFixesSelectCursorInput(ctx.display->dpy, ctx.display->root, XFixesDisplayCursorNotifyMask);
@@ -3269,7 +3276,8 @@ int main(int argc, char **argv)
ret = add_fd(&ctx, record_mouse(&ctx));
if (ret) {
fprintf(stderr, "XTEST extension not supported by display \"%s\"\n", DisplayString(ctx.display->dpy));
- return -ret;
+ ret = -ret;
+ goto out;
}
open = fail = 0;
@@ -3299,11 +3307,15 @@ int main(int argc, char **argv)
} else
open++;
}
- if (open == 0)
- return fail ? ECONNREFUSED : 0;
+ if (open == 0) {
+ ret = fail ? ECONNREFUSED : 0;
+ goto out;
+ }
- if (daemonize && daemon(0, 0))
- return EINVAL;
+ if (daemonize && daemon(0, 0)) {
+ ret = EINVAL;
+ goto out;
+ }
signal(SIGHUP, signal_handler);
signal(SIGINT, signal_handler);
@@ -3445,6 +3457,8 @@ int main(int argc, char **argv)
}
}
+ ret = 0;
+out:
context_cleanup(&ctx);
- return 0;
+ return ret;
}