]> git.ozlabs.org Git - ccan-lca-2011.git/commitdiff
lca2011: dump talloc tree on SIGUSR1
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 03:50:02 +0000 (14:20 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 03:50:02 +0000 (14:20 +1030)
Useful for finding runtime memory leaks.

ccan/oserver/oserver.c

index c293dd5178ed40651ab3b3b1d6269c2577af1e5e..c7a523c21ff121f9f0ace96895216e143d3d2131 100644 (file)
@@ -306,6 +306,21 @@ static int destroy_oserver(struct oserver *oserver)
        return 0;
 }
 
+static void talloc_dump(struct tevent_context *ev,
+                       struct tevent_signal *se,
+                       int signum,
+                       int count,
+                       void *siginfo,
+                       void *_oserver)
+{
+       struct oserver *oserver = _oserver;
+       FILE *f = fopen("/var/run/oserver/talloc.dump", "w");
+       if (f) {
+               talloc_report_full(oserver, f);
+               fclose(f);
+       }
+}
+
 struct oserver *oserver_setup(struct tevent_context *ev, unsigned short port)
 {
        struct oserver *oserver;
@@ -352,5 +367,9 @@ struct oserver *oserver_setup(struct tevent_context *ev, unsigned short port)
        /* Don't kill us if client dies. */
        signal(SIGPIPE, SIG_IGN);
 
+       /* Show talloc tree on SIGUSR1. */
+       tevent_add_signal(ev, oserver, SIGUSR1, SA_RESTART,
+                         talloc_dump, oserver);
+
        return oserver;
 }