]> granicus.if.org Git - libevent/commitdiff
Make test-ratelim clean up after itself better.
authorNick Mathewson <nickm@torproject.org>
Thu, 13 May 2010 19:38:39 +0000 (15:38 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 13 May 2010 19:40:43 +0000 (15:40 -0400)
test/test-ratelim.c

index c0c8c23f00345b8ac6cc03fcb689dfd75ce26a0a..ee2bbfc1b25ed9392065b2efd0ea0bd6e7e13f8f 100644 (file)
@@ -119,6 +119,22 @@ echo_readcb(struct bufferevent *bev, void *ctx)
                bufferevent_disable(bev, EV_READ);
 }
 
+static void
+echo_writecb(struct bufferevent *bev, void *ctx)
+{
+       struct evbuffer *output = bufferevent_get_output(bev);
+       if (evbuffer_get_length(output) < 512000)
+               bufferevent_enable(bev, EV_READ);
+}
+
+static void
+echo_eventcb(struct bufferevent *bev, short what, void *ctx)
+{
+       if (what & (BEV_EVENT_EOF|BEV_EVENT_ERROR)) {
+               bufferevent_free(bev);
+       }
+}
+
 static void
 echo_listenercb(struct evconnlistener *listener, evutil_socket_t newsock,
     struct sockaddr *sourceaddr, int socklen, void *ctx)
@@ -128,7 +144,7 @@ echo_listenercb(struct evconnlistener *listener, evutil_socket_t newsock,
        struct bufferevent *bev;
 
        bev = bufferevent_socket_new(base, newsock, flags);
-       bufferevent_setcb(bev, echo_readcb, NULL, NULL, NULL);
+       bufferevent_setcb(bev, echo_readcb, echo_writecb, echo_eventcb, NULL);
        if (conn_bucket_cfg)
                bufferevent_set_rate_limit(bev, conn_bucket_cfg);
        if (ratelim_group)
@@ -226,6 +242,19 @@ test_ratelimiting(void)
 
        event_base_dispatch(base);
 
+       for (i = 0; i < cfg_n_connections; ++i)
+               bufferevent_free(bevs[i]);
+       evconnlistener_free(listener);
+
+       /* This should get _everybody_ freed */
+       tv.tv_sec = 0;
+       tv.tv_usec = 300000;
+       event_base_loopexit(base, &tv);
+       event_base_dispatch(base);
+
+       if (ratelim_group)
+               bufferevent_rate_limit_group_free(ratelim_group);
+
        total_received = 0;
        total_persec = 0.0;
        total_sq_persec = 0.0;
@@ -350,7 +379,10 @@ main(int argc, char **argv)
        err = WSAStartup(wVersionRequested, &wsaData);
 #endif
 
-
+#ifndef WIN32
+       if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
+               return 1;
+#endif
        for (i = 1; i < argc; ++i) {
                for (j = 0; options[j].name; ++j) {
                        if (!strcmp(argv[i],options[j].name)) {