diff --git a/clamav-devel/ChangeLog b/clamav-devel/ChangeLog index 8ebb910cb..2a66f079b 100644 --- a/clamav-devel/ChangeLog +++ b/clamav-devel/ChangeLog @@ -1,3 +1,9 @@ +Thu May 26 04:03:31 CEST 2005 (tk) +---------------------------------- + * clamd/scanner.c: quick recovery of thread resources when clamd clients + abandon stream connection requests (patch by Mark + Pizzolato ) + Thu May 26 03:20:44 CEST 2005 (tk) ---------------------------------- * libclamav/others.c: print warnings and errors in single call to write diff --git a/clamav-devel/clamd/scanner.c b/clamav-devel/clamd/scanner.c index 77507a837..7d03c8f34 100644 --- a/clamav-devel/clamd/scanner.c +++ b/clamav-devel/clamd/scanner.c @@ -380,7 +380,11 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_node *root return -1; } else { listen(sockfd, 1); - mdprintf(odesc, "PORT %d\n", port); + if(mdprintf(odesc, "PORT %d\n", port) <= 0) { + logg("!ScanStream: error transmitting port.\n"); + close(sockfd); + return -1; + } } switch(retval = poll_fd(sockfd, timeout)) { @@ -478,11 +482,11 @@ int scanstream(int odesc, unsigned long int *scanned, const struct cl_node *root virusaction("stream", virname, copt); } else if(ret != CL_CLEAN) { mdprintf(odesc, "stream: %s ERROR\n", cl_strerror(ret)); - logg("stream: %s ERROR\n", cl_strerror(ret)); + logg("stream %d: %s ERROR\n", port, cl_strerror(ret)); } else { mdprintf(odesc, "stream: OK\n"); if(logok) - logg("stream: OK\n"); + logg("stream %d: OK\n", port); } return ret; diff --git a/clamav-devel/shared/output.c b/clamav-devel/shared/output.c index 3ccc34fe9..fa03255c5 100644 --- a/clamav-devel/shared/output.c +++ b/clamav-devel/shared/output.c @@ -73,8 +73,7 @@ int mdprintf(int desc, const char *str, ...) va_start(args, str); bytes = vsnprintf(buff, 512, str, args); va_end(args); - write(desc, buff, bytes); - return bytes; + return send(desc, buff, bytes, 0); } void logg_close(void) {