From 621a1b2947b39d662123c98c49404fe71353c241 Mon Sep 17 00:00:00 2001 From: Niels Provos Date: Wed, 23 May 2007 05:31:33 +0000 Subject: [PATCH] support freeing of evrpc base svn:r356 --- evrpc.c | 6 ++++++ evrpc.h | 3 +++ test/regress.c | 8 ++++---- test/regress_rpc.c | 2 ++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/evrpc.c b/evrpc.c index 0d3e014d..e221150b 100644 --- a/evrpc.c +++ b/evrpc.c @@ -82,7 +82,13 @@ evrpc_init(struct evhttp *http_server) void evrpc_free(struct evrpc_base *base) { + struct evrpc *rpc; + + while ((rpc = TAILQ_FIRST(&base->registered_rpcs)) != NULL) { + assert(evrpc_unregister_rpc(base, rpc->uri)); + } + free(base); } static void evrpc_pool_schedule(struct evrpc_pool *pool); diff --git a/evrpc.h b/evrpc.h index 5ec5ff84..2cb97457 100644 --- a/evrpc.h +++ b/evrpc.h @@ -211,6 +211,9 @@ struct evhttp; /* functions to start up the rpc system */ struct evrpc_base *evrpc_init(struct evhttp *server); +/* frees the base - for now, you are responsible for making sure that no rpcs are ongoing */ +void evrpc_free(struct evrpc_base *); + /* this macro is used to register RPCs with the HTTP Server */ #define EVRPC_REGISTER(base, name, request, reply, callback, cbarg) \ do { \ diff --git a/test/regress.c b/test/regress.c index dbf0fe02..455604d5 100644 --- a/test/regress.c +++ b/test/regress.c @@ -1079,16 +1079,16 @@ main (int argc, char **argv) test_want_only_once(); + evtag_test(); + + rpc_test(); + #ifndef WIN32 test_signal_dealloc(); test_signal_pipeloss(); test_signal_switchbase(); #endif - evtag_test(); - - rpc_test(); - return (0); } diff --git a/test/regress_rpc.c b/test/regress_rpc.c index 7a346ac4..b90f8654 100644 --- a/test/regress_rpc.c +++ b/test/regress_rpc.c @@ -133,6 +133,8 @@ rpc_teardown(struct evrpc_base *base) { assert(EVRPC_UNREGISTER(base, Message) == 0); assert(EVRPC_UNREGISTER(base, NeverReply) == 0); + + evrpc_free(base); } static void