diff freeDiameter/sctps.c @ 223:85dc47afeac7

Cleanup termination
author Sebastien Decugis <sdecugis@nict.go.jp>
date Tue, 23 Feb 2010 15:09:48 +0900
parents d8e3336e4744
children 80a7e65167c4
line wrap: on
line diff
--- a/freeDiameter/sctps.c	Tue Feb 23 11:42:26 2010 +0900
+++ b/freeDiameter/sctps.c	Tue Feb 23 15:09:48 2010 +0900
@@ -114,6 +114,11 @@
 	} while (conn->cc_loop);
 	
 out:
+	/* Signal termination of the connection to all decipher threads */
+	for (strid = 0; strid < conn->cc_sctp_para.pairs; strid++) {
+		if (conn->cc_sctps_data.array[strid].raw_recv)
+			CHECK_FCT_DO(fd_event_send(conn->cc_sctps_data.array[strid].raw_recv, FDEVP_CNX_ERROR, 0, NULL), goto fatal );
+	}
 	TRACE_DEBUG(FULL, "Thread terminated");	
 	return NULL;
 	
@@ -180,7 +185,8 @@
 	if (!ctx->partial.buf) {
 		int ev;
 		CHECK_FCT_DO( errno = fd_event_get(ctx->raw_recv, &ev, &ctx->partial.bufsz, (void *)&ctx->partial.buf), return -1 );
-		ASSERT( ev == FDEVP_CNX_MSG_RECV );
+		if (ev == FDEVP_CNX_ERROR) 
+			return 0; /* connection closed */
 	}
 		
 	pulled = ctx->partial.bufsz - ctx->partial.offset;
"Welcome to our mercurial repository"