changeset 191:de80f6a76c4f

Another attempt to workround the crash issue...
author Sebastien Decugis <sdecugis@nict.go.jp>
date Fri, 05 Feb 2010 18:12:47 +0900
parents 02857b1cd872
children acf6ffad7dbf
files freeDiameter/tcp.c include/freeDiameter/libfreeDiameter.h
diffstat 2 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/freeDiameter/tcp.c	Fri Feb 05 17:59:41 2010 +0900
+++ b/freeDiameter/tcp.c	Fri Feb 05 18:12:47 2010 +0900
@@ -117,26 +117,30 @@
 /* Create a client socket and connect to remote server */
 int fd_tcp_client( int *sock, sSA * sa, socklen_t salen )
 {
+	int ret = 0;
+	int s;
+	
 	TRACE_ENTRY("%p %p %d", sock, sa, salen);
-	CHECK_PARAMS( sock && sa && salen );
+	CHECK_PARAMS( sock && (*sock <= 0) && sa && salen );
 	
 	/* Create the socket */
-	CHECK_SYS(  *sock = socket(sa->sa_family, SOCK_STREAM, IPPROTO_TCP)  );
+	CHECK_SYS(  s = socket(sa->sa_family, SOCK_STREAM, IPPROTO_TCP)  );
 	
 	/* Cleanup if we are cancelled */
-	pthread_cleanup_push(fd_cleanup_socket, sock);
+	pthread_cleanup_push(fd_cleanup_socket, &s);
 	
 	/* Set the socket options */
-	CHECK_FCT(  fd_tcp_setsockopt(sa->sa_family, *sock)  );
+	CHECK_FCT(  fd_tcp_setsockopt(sa->sa_family, s)  );
 	
 	TRACE_DEBUG_sSA(FULL, "Attempting TCP connection with peer: ", sa, NI_NUMERICHOST | NI_NUMERICSERV, "..." );
 	
 	/* Try connecting to the remote address */
-	CHECK_SYS_DO( connect(*sock, sa, salen), { int ret = errno; close(*sock); *sock = -1; return ret; } );
+	CHECK_SYS_DO( connect(s, sa, salen), { ret = errno; close(s); s = -1; } );
 	
 	/* Done! */
 	pthread_cleanup_pop(0);
-	return 0;
+	*sock = s;
+	return ret;
 }
 
 
--- a/include/freeDiameter/libfreeDiameter.h	Fri Feb 05 17:59:41 2010 +0900
+++ b/include/freeDiameter/libfreeDiameter.h	Fri Feb 05 18:12:47 2010 +0900
@@ -521,7 +521,7 @@
 }
 static __inline__ void fd_cleanup_socket(void * sockptr)
 {
-	if (sockptr) {
+	if (sockptr && (*(int *)sockptr > 0)) {
 		CHECK_SYS_DO( close(*(int *)sockptr), /* ignore */ );
 		*(int *)sockptr = -1;
 	}
"Welcome to our mercurial repository"