--- ./main.c.thread3 2007-05-17 15:35:59.000000000 +0100 +++ ./main.c 2007-05-17 16:32:39.000000000 +0100 @@ -500,9 +500,12 @@ int n, sock; LOCK(cl->updateMutex); - sock = cl->sock; + sock = dup(cl->sock); UNLOCK(cl->updateMutex); + if (sock == -1) + break; + FD_ZERO(&rfds); FD_SET(sock, &rfds); FD_ZERO(&efds); @@ -518,11 +521,13 @@ n = select(sock + 1, &rfds, &wfds, &efds, &tv); if (n < 0) { rfbLogPerror("ReadExact: select"); + close(sock); break; } if (n == 0) /* timeout */ { rfbSendFileTransferChunk(cl); + close(sock); continue; } @@ -533,6 +538,8 @@ if (FD_ISSET(sock, &rfds) || FD_ISSET(sock, &efds)) rfbProcessClientMessage(cl); + close(sock); + LOCK(cl->updateMutex); if (cl->sock == -1) { UNLOCK(cl->updateMutex);