Denis Fondras <open...@ledeuns.net> writes: >> By the OS, which cleans up after the process exits. If it wasn't that >> way, we'd all have a much shorter uptime... >> > > Thank you Jérémie :) > I had not considered it as I can see > > ... > free(ibuf_rde); > ... > free(ibuf_main); > ... > > at the end of session_main() in session.c.
Maybe you should consider this as "best effort". It's a good thing to clean up at the end of a function in an executable, even in error cases where the end result is exit(1) / err() / fatal(), because code gets copied and used in different contexts (where cleaning up could be necessary). But from discussions on tech@ a few months ago, you'll see that there is no real interest in amending those non-problems if no true audit is done to track down all occurrences in a particular piece of software. That said, thid diff works fine on a simple test setup. Index: session.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/session.c,v retrieving revision 1.334 diff -u -p -p -u -r1.334 session.c --- session.c 22 Jan 2014 04:08:08 -0000 1.334 +++ session.c 6 May 2014 13:21:26 -0000 @@ -599,6 +599,7 @@ session_main(int pipe_m2s[2], int pipe_s free(la); } free(conf->listen_addrs); + free(conf); free(peer_l); free(mrt_l); free(pfd); -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE