summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--NEWS1
-rw-r--r--libguile/ChangeLog5
-rw-r--r--libguile/socket.c10
4 files changed, 17 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index e36ac5652..c87193e44 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-09-02 Ludovic Courtès <ludo@gnu.org>
+
+ * NEWS: Mention memory leak fix in `make-socket-address'.
+
2007-09-01 Ludovic Courtès <ludo@gnu.org>
* 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 <ludo@gnu.org>
+
+ * socket.c (scm_make_socket_address): Free C_ADDRESS after use.
+ This fixes a memory leak.
+
2007-08-26 Han-Wen Nienhuys <hanwen@lilypond.org>
* 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