From: Rusty Russell Date: Fri, 21 Jan 2011 04:42:21 +0000 (+1030) Subject: lca2011: valgrind catches an error for us. X-Git-Url: http://git.ozlabs.org/?p=ccan-lca-2011.git;a=commitdiff_plain;h=e78c302eef5bf006cd0994c03a98b1e1c078b67b lca2011: valgrind catches an error for us. When we moved the clients[] array into oserver, we didn't initialize it. Before, it was a static, so implicitly set to NULL. --- diff --git a/ccan/oserver/_info b/ccan/oserver/_info index 5dfc5f8..5a69855 100644 --- a/ccan/oserver/_info +++ b/ccan/oserver/_info @@ -8,10 +8,6 @@ * * License: GPL * - * Ccanlint: - * // hack to make valgrind show the error. FIXME! - * tests_pass_valgrind --child-silent-after-fork=no - * * Example: * #include * #include diff --git a/ccan/oserver/oserver.c b/ccan/oserver/oserver.c index 3256369..076ba70 100644 --- a/ccan/oserver/oserver.c +++ b/ccan/oserver/oserver.c @@ -178,6 +178,12 @@ static void add_client(struct tevent_context *ev, tevent_fd_set_flags(oserver->fde, 0); } +static void clear_clients(struct oserver *oserver) +{ + memset(oserver->clients, 0, + ARRAY_SIZE(oserver->clients) * sizeof(oserver->clients[0])); +} + static int destroy_oserver(struct oserver *oserver) { close(oserver->fd); @@ -194,12 +200,13 @@ struct oserver *oserver_setup(struct tevent_context *ev, unsigned short port) } u; oserver = talloc(ev, struct oserver); - + clear_clients(oserver); oserver->fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (oserver->fd < 0) { talloc_free(oserver); return NULL; } + talloc_set_destructor(oserver, destroy_oserver); if (setsockopt(oserver->fd, SOL_SOCKET, SO_REUSEADDR,