Free txbuf, rxbuf in vconn-ssl and vconn-stream destructors.
authorBen Pfaff <blp@nicira.com>
Thu, 27 Nov 2008 00:25:55 +0000 (16:25 -0800)
committerBen Pfaff <blp@nicira.com>
Thu, 27 Nov 2008 06:25:39 +0000 (22:25 -0800)
This bug was causing secchan to leak a little bit of memory on almost every
connection close.  This is most visible when openflow-monitor is running,
because openflow-monitor connects to secchan once per second.

lib/vconn-ssl.c
lib/vconn-stream.c

index 65e420f..383714a 100644 (file)
@@ -170,6 +170,7 @@ static int ssl_init(void);
 static int do_ssl_init(void);
 static bool ssl_wants_io(int ssl_error);
 static void ssl_close(struct vconn *);
+static void ssl_clear_txbuf(struct ssl_vconn *);
 static int interpret_ssl_error(const char *function, int ret, int error,
                                int *want);
 static void ssl_tx_poll_callback(int fd, short int revents, void *vconn_);
@@ -482,6 +483,8 @@ ssl_close(struct vconn *vconn)
 {
     struct ssl_vconn *sslv = ssl_vconn_cast(vconn);
     poll_cancel(sslv->tx_waiter);
+    ssl_clear_txbuf(sslv);
+    ofpbuf_delete(sslv->rxbuf);
     SSL_free(sslv->ssl);
     close(sslv->fd);
     free(sslv);
index d8c8b47..966c242 100644 (file)
@@ -66,6 +66,8 @@ static struct vconn_class stream_vconn_class;
 
 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(10, 25);
 
+static void stream_clear_txbuf(struct stream_vconn *);
+
 int
 new_stream_vconn(const char *name, int fd, int connect_status,
                  uint32_t ip, struct vconn **vconnp)
@@ -94,6 +96,8 @@ stream_close(struct vconn *vconn)
 {
     struct stream_vconn *s = stream_vconn_cast(vconn);
     poll_cancel(s->tx_waiter);
+    stream_clear_txbuf(s);
+    ofpbuf_delete(s->rxbuf);
     close(s->fd);
     free(s);
 }