guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/12] Guile-DBI: Fix memory leak


From: Linas Vepstas
Subject: [PATCH 3/12] Guile-DBI: Fix memory leak
Date: Fri, 19 Sep 2008 09:06:23 -0500
User-agent: Mutt/1.5.15+20070412 (2007-04-11)


Fix memory leak; various allocated strins are not freed
in assorted error paths.

Signed-off-by: Linas Vepstas <address@hidden>

---
 src/guile-dbi.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Index: guile-dbi-2.0.0/src/guile-dbi.c
===================================================================
--- guile-dbi-2.0.0.orig/src/guile-dbi.c        2008-09-16 20:52:25.000000000 
-0500
+++ guile-dbi-2.0.0/src/guile-dbi.c     2008-09-16 20:53:13.000000000 -0500
@@ -55,12 +55,13 @@ SCM_DEFINE (make_g_db_handle, "dbi-open"
   g_db_handle->handle  = NULL;
   g_db_handle->db_info = NULL;
 
-  bcknd_str = (char*) gh_scm2newstr(bcknd,NULL);
+  bcknd_str = scm_to_locale_string (bcknd);
 
   sodbd=(char*) malloc (sizeof(char)*(strlen("libguile-dbd-") +
                                      strlen(bcknd_str) + 10));
   if (sodbd == NULL)
     {
+      free(bcknd_str);
       g_db_handle->status = scm_cons(scm_from_int(errno),
                                     scm_makfrom0str(strerror(errno)));
       SCM_RETURN_NEWSMOB (g_db_handle_tag, g_db_handle);
@@ -70,6 +71,8 @@ SCM_DEFINE (make_g_db_handle, "dbi-open"
   g_db_handle->handle = dlopen(sodbd,RTLD_NOW);
   if ( g_db_handle->handle == NULL)
     {
+      free(bcknd_str);
+      free(sodbd);
       g_db_handle->status =  scm_cons(scm_from_int(1),
                              scm_makfrom0str(dlerror()));      
       SCM_RETURN_NEWSMOB (g_db_handle_tag, g_db_handle);
@@ -78,6 +81,8 @@ SCM_DEFINE (make_g_db_handle, "dbi-open"
   __gdbi_dbd_wrap(g_db_handle,(char*) __FUNCTION__,(void**) &connect);  
   if (scm_equal_p (SCM_CAR(g_db_handle->status),scm_from_int(0)) == SCM_BOOL_F)
     {
+      free(bcknd_str);
+      free(sodbd);
       SCM_RETURN_NEWSMOB (g_db_handle_tag, g_db_handle);
     }
   

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]