Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site umcp-cs.UUCP
Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!godot!harvard!seismo!umcp-cs!chris
From: chris@umcp-cs.UUCP (Chris Torek)
Newsgroups: net.bugs.uucp
Subject: Re: Re: hung line help needed
Message-ID: <1479@umcp-cs.UUCP>
Date: Thu, 29-Nov-84 21:44:06 EST
Article-I.D.: umcp-cs.1479
Posted: Thu Nov 29 21:44:06 1984
Date-Received: Sat, 1-Dec-84 19:11:24 EST
References: <85@daemon.UUCP> <33700001@trsvax.UUCP> <2923@allegra.UUCP> <542@godot.UUCP> <2933@allegra.UUCP>
Organization: U of Maryland, Computer Science Dept., College Park, MD
Lines: 22

At high load averages, sleep() may hang randomly waiting for a signal
that has already arrived.  I haven't tried this myself, but you might
try changing

	while (!ringring)
		sigpause(omask & ~mask(SIGALRM));

to

	sigblock(mask(SIGALRM));	/* make next test atomic */
	while (!ringring) {		/* test */
		sigpause(omask & ~mask(SIGALRM)); /* await signal(s) */
		sigsetmask(omask);	/* allow alarm through */
		sigblock(mask(SIGALRM));/* make next test atomic */
	}
	sigsetmask(omask);		/* restore signal mask */
-- 
(This line accidently left nonblank.)

In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (301) 454-7690
UUCP:	{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:	chris@umcp-cs		ARPA:	chris@maryland