Martin Gadbois <martin.gadb...@colubris.com>:

> Using OpenVPN 2.0.5 and 2.0.9, I notice that an somewhat idle connection
> increases the RSS of the server process linearly with time.
> 
> valgrind says that there are no memory leaks. So where is this memory kept?

You might be suffering from the problem I sent a patch for some months
back. Basically, socket.c, socket_connect() accumulated unlimited
amounts of memory if the server wasn't available. I added a pair of
gc_free()/gc_new() in the middle of the loop.

==Begin pseudo-patch====================================================
       msg (D_LINK_ERRORS | M_ERRNO_SOCK,
            "TCP: connect to %s failed, will try again in %d seconds",
            print_sockaddr (remote, &gc),
            connect_retry_seconds);

+      /* avoid accumulating garbage when the server is not available */
+      gc_free (&gc);
+      gc = gc_new ();
       openvpn_close_socket (*sd);
       openvpn_sleep (connect_retry_seconds);
==End pseudo-patch======================================================

It was not garbage because all dynamic memory was kept track of and
would be cleared at the end of the function (gc_free()). However, as
long as a connection couldn't be formed, boundless amounts of memory
were allocated.


Marko

Reply via email to