aboutsummaryrefslogtreecommitdiffstats
path: root/src/coopgammad.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/coopgammad.c')
-rw-r--r--src/coopgammad.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/coopgammad.c b/src/coopgammad.c
index 83352e0..1276189 100644
--- a/src/coopgammad.c
+++ b/src/coopgammad.c
@@ -419,14 +419,13 @@ static enum init_status initialise(int foreground, int keep_stderr, int query)
static void destroy(int full)
{
if (full)
- disconnect_all();
-
- if (full)
- close_socket(socketpath);
-
- if (full && (outputs != NULL))
- restore_gamma();
-
+ {
+ disconnect_all();
+ close_socket(socketpath);
+ free(argv0_real);
+ if (outputs != NULL)
+ restore_gamma();
+ }
state_destroy();
free(socketpath);
if (full && (pidpath != NULL))
@@ -618,7 +617,11 @@ static char* reexecute(void)
destroy(0);
+#if !defined(USE_VALGRIND)
execlp(argv0_real ? argv0_real : argv0, argv0, "- ", statefile, NULL);
+#else
+ execlp("valgrind", "valgrind", "--leak-check=full", argv0_real ? argv0_real : argv0, "- ", statefile, NULL);
+#endif
saved_errno = errno;
free(argv0_real), argv0_real = NULL;
errno = saved_errno;