src/sock_gnutls.c
changeset 29 3f0f2898fea3
parent 28 9c1050bc8709
child 85 75bc8b164ef8
--- a/src/sock_gnutls.c	Tue Mar 10 02:34:11 2009 +0200
+++ b/src/sock_gnutls.c	Tue Mar 10 02:51:44 2009 +0200
@@ -4,7 +4,6 @@
 #include <stdlib.h>
 #include <err.h>
 
-// XXX: errors
 static err_t sock_gnutls_read (struct sock_stream *base_sock, void *buf, size_t *len)
 {
     struct sock_gnutls *sock = SOCK_FROM_BASE(base_sock, struct sock_gnutls);
@@ -128,16 +127,9 @@
 static void sock_gnutls_release (struct sock_stream *base_sock)
 {
     struct sock_gnutls *sock = SOCK_FROM_BASE(base_sock, struct sock_gnutls);
-
-    // close the session rudely
-    // XXX: does this actually do everything we need it to? Don't want to call gnutls_bye here, since we're void...
-    gnutls_deinit(sock->session);
     
-    // terminate the TCP transport
-    sock_tcp_close(SOCK_GNUTLS_TCP(sock));
-
-    // free
-    free(sock);
+    // DIEEEE
+    sock_gnutls_destroy(sock);
 }
 
 /*
@@ -195,7 +187,6 @@
     return SUCCESS;
 }
 
-
 err_t sock_ssl_connect (struct sock_stream **sock_ptr, const char *host, const char *service, struct error_info *err)
 {
     struct sock_gnutls *sock = NULL;
@@ -237,8 +228,23 @@
     return SUCCESS;
 
 error:
-    // XXX: cleanup
+    // cleanup
+    sock_gnutls_destroy(sock);
 
     return ERROR_CODE(err);    
 }
 
+void sock_gnutls_destroy (struct sock_gnutls *sock)
+{
+    // terminate the TCP transport
+    sock_tcp_close(SOCK_GNUTLS_TCP(sock));
+
+    // close the session rudely
+    // XXX: does this actually do everything we need it to? Don't want to call gnutls_bye here, since we're void...
+    gnutls_deinit(sock->session);
+    
+    // free
+    free(sock);
+}
+
+