Mercurial > hg > freeDiameter
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;