From: Rusty Russell Date: Fri, 21 Jan 2011 03:50:02 +0000 (+1030) Subject: lca2011: dump talloc tree on SIGUSR1 X-Git-Url: http://git.ozlabs.org/?a=commitdiff_plain;h=e3096dff04758d433eb415f00d586d144b2ffea4;p=ccan-lca-2011.git lca2011: dump talloc tree on SIGUSR1 Useful for finding runtime memory leaks. --- diff --git a/ccan/oserver/oserver.c b/ccan/oserver/oserver.c index c293dd5..c7a523c 100644 --- a/ccan/oserver/oserver.c +++ b/ccan/oserver/oserver.c @@ -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; }