From 8ebce5612d0e58cc9d10b35a994ad803df7e3326 Mon Sep 17 00:00:00 2001 From: Daniel Collins Date: Sun, 8 May 2011 21:32:54 +0000 Subject: [PATCH] Release mutex before calling r_recv() in recvfrom() due to deadlocking. Locking code needs rewriting at some point... --- src/winsock.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/winsock.c b/src/winsock.c index cdbe287..395300c 100644 --- a/src/winsock.c +++ b/src/winsock.c @@ -394,10 +394,12 @@ int WSAAPI recvfrom(SOCKET fd, char *buf, int len, int flags, struct sockaddr *a RETURN_WSA(ERROR_OUTOFMEMORY, -1); } + unlock_mutex(); + int rval = r_recv(fd, (char*)packet, PACKET_BUF_SIZE, flags); if(rval == -1) { free(packet); - RETURN(-1); + return -1; } if(from) { @@ -416,15 +418,16 @@ int WSAAPI recvfrom(SOCKET fd, char *buf, int len, int flags, struct sockaddr *a rval = packet->size; free(packet); - RETURN(rval); + return rval; }else{ memcpy(buf, packet->data, len); free(packet); - RETURN_WSA(WSAEMSGSIZE, -1); + WSASetLastError(WSAEMSGSIZE); + return -1; } }else{ - RETURN(r_recvfrom(fd, buf, len, flags, addr, addrlen)); + return r_recvfrom(fd, buf, len, flags, addr, addrlen); } }