]> git.ozlabs.org Git - ccan-lca-2011.git/commitdiff
lca2011: oserver_restore to restore talloc hierarchy.
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 03:55:12 +0000 (14:25 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 03:55:12 +0000 (14:25 +1030)
ccan/oserver/oserver.c

index 50b49bd5f94746c8259fb3c609c285c5d68684c9..405a576c63d103003970e17c9b6e2fe477bf3c71 100644 (file)
@@ -358,18 +358,25 @@ struct oserver *oserver_restore(struct tevent_context *ev, const char *dumpfile)
                return NULL;
        }
 
-       /* Restore ignored fields in clients (fde and oserver). */
+       /* Restore ignored fields in clients, and talloc hierarchy. */
        for (i = 0; i < ARRAY_SIZE(oserver->clients); i++) {
                struct client *client = oserver->clients[i];
                if (!client)
                        continue;
+               /* These two were marked CDUMP_IGNORE. */
                client->oserver = oserver;
                client->fde = tevent_add_fd(ev, client, client->fd,
                                            state_flag_map[client->state],
                                            service_client, client);
                tevent_fd_set_auto_close(client->fde);
+               /* cdump knows nothing of talloc. */
+               talloc_steal(oserver, client);
+               talloc_steal(client, client->question);
+               talloc_steal(client, client->answer);
+               talloc_set_destructor(client, cleanup_client);
        }
 
+       talloc_set_destructor(oserver, destroy_oserver);
        if (!complete_server(ev, oserver, dumpfile)) {
                talloc_free(oserver);
                return NULL;