vconn-unix: Unlink Unix sockets for vconns at close and free memory.
authorBen Pfaff <blp@nicira.com>
Mon, 21 Sep 2009 20:07:10 +0000 (13:07 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 21 Sep 2009 23:44:58 +0000 (16:44 -0700)
commit56192221b7a26438a5e1810571d46ed25bc65557
tree501741201247718d74a002653e5c84e47b537cca
parent6a0061cbf5d8e2637040c54140c90e474b6543ca
vconn-unix: Unlink Unix sockets for vconns at close and free memory.

The make_unix_socket() function that Unix vconns use to create their
bindings calls fatal_signal_add_file_to_unlink() to make sure that the
binding socket gets unlinked from the file system if the process is killed
by a fatal signal.  However, this doesn't happen until the process is
actually killed, even if the vconn that owns the socket is actually closed.

This wasn't a problem when the vconn-unix code was written, because all
of the unix vconns were created at process start time and never destroyed
during the normal process runtime.  However, these days the vswitch can
create and destroy unix vconns at runtime depending on the contents of its
configuration file, so it's better to clean up the file system and free
the memory required to keep track of these sockets.

This commit makes unix vconns and pvconns delete their files and free
the memory used to track them when the (p)vconns are closed.

This is only a very minor leak most of the time.

Bug #1817.
lib/vconn-stream.c
lib/vconn-stream.h
lib/vconn-tcp.c
lib/vconn-unix.c