Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Sep 2002 21:37:21 -0700
From:      Alfred Perlstein <bright@mu.org>
To:        hackers@freebsd.org
Cc:        des@freebsd.org, kris@freebsd.org
Subject:   libfetch bug.
Message-ID:  <20020917043721.GG86737@elvis.mu.org>

next in thread | raw e-mail | index | archive | help
libfetch seems to have a bug such that if a disconnect happens at
a particular point it spins in a tight loop.

I tracked it down to this fix:

Index: common.c
===================================================================
RCS file: /home/ncvs/src/lib/libfetch/common.c,v
retrieving revision 1.31
diff -u -r1.31 common.c
--- common.c	24 Jun 2002 12:18:41 -0000	1.31
+++ common.c	17 Sep 2002 04:28:12 -0000
@@ -404,6 +404,7 @@
 	char *tmp;
 	size_t tmpsize;
 	char c;
+	int error;
 
 	if (conn->buf == NULL) {
 		if ((conn->buf = malloc(MIN_BUF_SIZE)) == NULL) {
@@ -417,8 +418,11 @@
 	conn->buflen = 0;
 
 	do {
-		if (_fetch_read(conn, &c, 1) == -1)
+		error = _fetch_read(conn, &c, 1);
+		if (error == -1)
 			return (-1);
+		else if (error == 0)
+			break;
 		conn->buf[conn->buflen++] = c;
 		if (conn->buflen == conn->bufsize) {
 			tmp = conn->buf;


The problem is that _fetch_read will return 0 if the connection is
broken and the code doesn't check for that.  Can someone please
review it?

A good way to test this is to try to "make fetch" the shells/bash2
port which will cause the hang, one can then "kill -QUIT" the fetch
process to get a traceback.

Thanks to Kris for pointing out that it was actually a bug in our
client software (i mistakenly thought the ftp site was just flakey
:)).

-- 
-Alfred Perlstein [alfred@freebsd.org]
'Instead of asking why a piece of software is using "1970s technology,"
 start asking why software is ignoring 30 years of accumulated wisdom.'

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020917043721.GG86737>