diff --git a/ChangeLog b/ChangeLog index e36ac5652..c87193e44 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-09-02 Ludovic Courtès + + * NEWS: Mention memory leak fix in `make-socket-address'. + 2007-09-01 Ludovic Courtès * NEWS: Mention duplicate binding warnings to stderr. diff --git a/NEWS b/NEWS index 21a20a182..aa278104e 100644 --- a/NEWS +++ b/NEWS @@ -43,6 +43,7 @@ Changes in 1.8.3 (since 1.8.2) ** Expressions like "(set! 'x #t)" no longer yield a crash ** Warnings about duplicate bindings now go to stderr +** A memory leak in `make-socket-address' was fixed ** Build problems on Solaris fixed * Implementation improvements diff --git a/libguile/ChangeLog b/libguile/ChangeLog index d7e1cedbe..215db2651 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,8 @@ +2007-09-02 Ludovic Courtès + + * socket.c (scm_make_socket_address): Free C_ADDRESS after use. + This fixes a memory leak. + 2007-08-26 Han-Wen Nienhuys * fports.c gc-card.c gc.c gc.h ioext.c ports.c ports.h weaks.h diff --git a/libguile/socket.c b/libguile/socket.c index 4ee8a84e5..d92607f89 100644 --- a/libguile/socket.c +++ b/libguile/socket.c @@ -1262,15 +1262,19 @@ SCM_DEFINE (scm_make_socket_address, "make-socket-address", 2, 0, 1, "@code{connect} for details).") #define FUNC_NAME s_scm_make_socket_address { + SCM result = SCM_BOOL_F; struct sockaddr *c_address; size_t c_address_size; c_address = scm_c_make_socket_address (family, address, args, &c_address_size); - if (!c_address) - return SCM_BOOL_F; + if (c_address != NULL) + { + result = scm_from_sockaddr (c_address, c_address_size); + free (c_address); + } - return (scm_from_sockaddr (c_address, c_address_size)); + return result; } #undef FUNC_NAME