From: Niels Provos Date: Wed, 23 May 2007 05:31:33 +0000 (+0000) Subject: support freeing of evrpc base X-Git-Tag: release-2.0.1-alpha~625 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=621a1b2947b39d662123c98c49404fe71353c241;p=libevent support freeing of evrpc base svn:r356 --- 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