From cedd3449faaafba0101b44c581c905ba7cd701c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 29 Mar 2010 13:07:03 +0000 Subject: clean up more properly on disconnect disconnecting has the awful tendency to trigger itself; for now, this is handled in the calling object's code, but later iemnet_(sender|receiver) should take care themselves svn path=/trunk/externals/iem/iemnet/; revision=13298 --- tcpserver.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'tcpserver.c') diff --git a/tcpserver.c b/tcpserver.c index ebfd2d5..8a5673b 100644 --- a/tcpserver.c +++ b/tcpserver.c @@ -89,20 +89,29 @@ static t_tcpserver_socketreceiver *tcpserver_socketreceiver_new(t_tcpserver *own static void tcpserver_socketreceiver_free(t_tcpserver_socketreceiver *x) { + DEBUG("freeing %x", x); if (x != NULL) { - if(x->sr_sender) iemnet__sender_destroy(x->sr_sender); - if(x->sr_receiver)iemnet__receiver_destroy(x->sr_receiver); + int sockfd=x->sr_fd; + t_iemnet_sender*sender=x->sr_sender; + t_iemnet_receiver*receiver=x->sr_receiver; + - sys_closesocket(x->sr_fd); x->sr_owner=NULL; x->sr_sender=NULL; x->sr_receiver=NULL; + x->sr_fd=-1; freebytes(x, sizeof(*x)); + + if(sender) iemnet__sender_destroy(sender); + if(receiver)iemnet__receiver_destroy(receiver); + + sys_closesocket(sockfd); } + DEBUG("freeed %x", x); } static int tcpserver_socket2index(t_tcpserver*x, int sockfd) @@ -257,7 +266,7 @@ static void tcpserver_send_socket(t_tcpserver *x, t_symbol *s, int argc, t_atom static void tcpserver_disconnect(t_tcpserver *x, int client) { int k; - + DEBUG("disconnect %x %d", x, client); tcpserver_socketreceiver_free(x->x_sr[client]); x->x_sr[client]=NULL; @@ -419,7 +428,9 @@ static void tcpserver_free(t_tcpserver *x) for(i = 0; i < MAX_CONNECT; i++) { if (NULL!=x->x_sr[i]) { + DEBUG("tcpserver_free %x", x); tcpserver_socketreceiver_free(x->x_sr[i]); + x->x_sr[i]=NULL; } } if (x->x_connectsocket >= 0) -- cgit v1.2.1