[net.unix-wizards] uuxqt dieing

mark (10/27/82)

From: Mark.Verber (Ohio State University DataBase Lab)
Has anyone had problems with uuxqt dieing for not reason at all.
UUXQT here will hum through 10 to 20 X files and then will just
stop executing the X files. When I go back to check the files to
see if they are in the wrong format ... they are ok. HELP!

This is uuxqt run with -x7, I have removed the bulk of the messages
that are useless. The location is marked by a comment contained within
<<<< and >>>> .

Thanks,
  Mark Verber

** START **
User - mark
process 
file - .
file - ..
file - LTMP.10666
file - LCK.XQT
file - AUDIT
file - LOGFILE
file - SYSLOG
file - LTMP.13208
file - D.osu-dbsX2343
file - STST.cbosgd
file - D.cbosgdB2345
file - C.cbosgdA2346

U daemon cbosgd

Z

F D.osu-dbsB3960

I D.osu-dbsB3960

C rnews 

xfile - X.cbosgdX3958
fin - /usr/spool/uucp/D.osu-dbsB3960, fout - /dev/null, sysout - osu-dbs, user - daemon
cmd - rnews 
cmd PATH=/bin:/usr/bin;rnews 
shio - PATH=/bin:/usr/bin;rnews 
status 0
exit cmd - 0
file - D.osu-dbsB3964
file - X.cbosgdX3962
U daemon cbosgd

Z

F D.osu-dbsB3964

I D.osu-dbsB3964

C rnews 

xfile - X.cbosgdX3962
fin - /usr/spool/uucp/D.osu-dbsB3964, fout - /dev/null, sysout - osu-dbs, user - daemon
cmd - rnews 
cmd PATH=/bin:/usr/bin;rnews 
shio - PATH=/bin:/usr/bin;rnews 
status 0
exit cmd - 0
file - D.osu-dbsB3968
file - X.cbosgdX3966
U daemon cbosgd

Z

F D.osu-dbsB4016

I D.osu-dbsB4016

C rnews 

xfile - X.cbosgdX4014
fin - /usr/spool/uucp/D.osu-dbsB4016, fout - /dev/null, sysout - osu-dbs, user - daemon
cmd - rnews 
cmd PATH=/bin:/usr/bin;rnews 
shio - PATH=/bin:/usr/bin;rnews 
status 0
exit cmd - 0
file - D.osu-dbsB4020
file - X.cbosgdX4018
<<<<<<<<<< 9 processed >>>>>>>>>>>
U daemon cbosgd

Z

F D.osu-dbsB4020

I D.osu-dbsB4020

C rnews 

xfile - X.cbosgdX4018
fin - /usr/spool/uucp/D.osu-dbsB4020, fout - /dev/null, sysout - osu-dbs, user - daemon
cmd - rnews 
cmd PATH=/bin:/usr/bin;rnews 
shio - PATH=/bin:/usr/bin;rnews 
status 0
exit cmd - 0
file - D.osu-dbsB4024
file - X.cbosgdX4022
file - D.osu-dbsB4028
file - X.cbosgdX4026
<<<<<<<<<< 434 file entrys removes >>>>>>>>>>
file - D.osu-dbsB2295
file - X.cbosgdX2293
file - D.osu-dbsB2299
file - X.cbosgdX2297

johnl (10/27/82)

The problem mentioned (that uuxqt will run about 10 jobs and then just
riffle through the spool directory) is well known.  One of the files that
gets opened doesn't get closed.  Match up the fopen() and fclose() calls
in the main program and it's easy to find.

Incidentally, uuxqt does an amazing amount of useless extra file opening
and closing.  Might be a good thing for somebody to clean up if they're
feeling bored.

John Levine, IECC, PO Box 349, Cambridge MA 02238; (617) 491-5450
decvax!cca!ima!johnl, harpo!esquire!ima!johnl, ucbvax!cbosgd!ima!johnl,
yale-co!jrl (all uucp), Levine@YALE (Arpa).

ecn-pa:ecn-pb:rick (10/27/82)

I believe your problem is an old one with uucp. I think it is not
closing a file descriptor after it is done with it, so uuxqt
dies when it runs out of file descriptors.

Look at your source for uuxqt. At the end of the main program
(about line 230), it should look something like this:

	rmfiles:
		xfp = fopen(xfile, "r");
		ASSERT(xfp != NULL, "CAN'T OPEN %s", xfile);
		while (fgets(buf, BUFSIZ, xfp) != NULL) {
			if (buf[0] != X_RQDFILE)
				continue;
			sscanf(&buf[1], "%s", file);
			unlink(file);
		}
#ifdef	PURDUE_EE
		/* fix the hanging open fd! (dpk.bmd70@BRL 10-26-81) --aef */
		fclose(xfp);
#endif
		unlink(xfile);
	}

	if (stcico)
		xuucico("");
	cleanup(0);
}

If you dont have the fclose(xfp) line, thats your culprit.

Rick Adams

hoffman (10/28/82)

I had exactly the same problem with our 11/45 running vanilla V7 uucp.
It seems that the uuxqt.c author left out an fclose()!
Files keep getting opened without being closed and you run out of
file descriptors (which for most systems is 20)!  After much tracing,
I found where the missing fclose() should go.  A program segment
of uuxqt.c follows:

	.
	.
	.
		}
	rmfiles:
		xfp = fopen(xfile, "r");
		ASSERT(xfp != NULL, "CAN'T OPEN %s", xfile);
		while (fgets(buf, BUFSIZ, xfp) != NULL) {
			if (buf[0] != X_RQDFILE)
				continue;
			sscanf(&buf[1], "%s", file);
			unlink(file);
		}
		fclose(xfp);	/* Added forgotten fclose() */
		unlink(xfile);
	}
	.
	.
	.

Uuxqt now merrily processes the hundreds of news articles we receive
in a day.

Bob Hoffman, U. of Pittsburgh Computer Science
...mcnc!idis!pitt!hoffman