From e1618ecbec65be2d3bf9b069305a0e48e365b9d4 Mon Sep 17 00:00:00 2001
From: "Wesley W. Terpstra" <w.terpstra@gsi.de>
Date: Fri, 24 Feb 2012 13:09:17 +0000
Subject: [PATCH] Fix a couple memory leaks

---
 api/glue/socket.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/api/glue/socket.c b/api/glue/socket.c
index 943c0d5..1d399b1 100644
--- a/api/glue/socket.c
+++ b/api/glue/socket.c
@@ -109,7 +109,10 @@ eb_status_t eb_socket_open(const char* port, eb_width_t supported_widths, eb_soc
     }
     
     /* Stop if some other problem */
-    if (status != EB_OK) break;
+    if (status != EB_OK) {
+      eb_free_transport(transportp);
+      break;
+    }
     
     transport->next = first_transport;
     transport->link_type = link_type;
@@ -165,6 +168,7 @@ eb_status_t eb_socket_close(eb_socket_t socketp) {
   struct eb_transport* transport;
   eb_transport_t transportp, next_transportp;
   eb_response_t tmp;
+  eb_socket_aux_t auxp;
   eb_handler_address_t i, next;
   
   socket = EB_SOCKET(socketp);
@@ -205,15 +209,18 @@ eb_status_t eb_socket_close(eb_socket_t socketp) {
     eb_free_handler_address(i);
   }
   
-  aux = EB_SOCKET_AUX(socket->aux);
+  auxp = socket->aux;
+  aux = EB_SOCKET_AUX(auxp);
   
   for (transportp = aux->first_transport; transportp != EB_NULL; transportp = next_transportp) {
     transport = EB_TRANSPORT(transportp);
     next_transportp = transport->next;
     eb_transports[transport->link_type].close(transport);
+    eb_free_transport(transportp);
   }
   
   eb_free_socket(socketp);
+  eb_free_socket_aux(auxp);
   return EB_OK;
 }
 
-- 
GitLab