Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 08 Sep 2000 16:33:01 -0700
From:      Jake Burkholder <jburkhol@home.com>
To:        Daniel Eischen <eischen@vigrid.com>
Cc:        Alfred Perlstein <bright@wintelcom.net>, smp@FreeBSD.ORG
Subject:   Re: SMPng: catching signals and mutexes. 
Message-ID:  <20000908233301.D27EBBA6D@io.yi.org>
In-Reply-To: Message from Daniel Eischen <eischen@vigrid.com>  of "Fri, 08 Sep 2000 15:48:18 EDT." <Pine.SUN.3.91.1000908154525.10025A@pcnet1.pcnet.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
> On Fri, 8 Sep 2000, Alfred Perlstein wrote:
> > There seems to be no way to specify that a signal is to interrupt
> > a wait on a mutex, I'm wondering if we should make it possible to
> > do so.
> 
> [...]
> 
> > I'm not sure I like this at all, shouldn't there be an 
> > mtx_enter with some option to return an error if a signal
> > arrives?
> 
> IMHO, yes.  Solaris has cv_wait_sig() for just that.
> 

Mutexes are meant to serve a different purpose than tsleep or
condition variables.

The next thing in line is to add a mutex argument to tsleep,
which will be atomicly released and re-acquired upon resume.

The code in question might then look like:

	mtx_enter(&sb->sb_mtx, MTX_DEF);
        while (sb->sb_flags & SB_LOCK) {
                sb->sb_flags |= SB_WANT;
                error = tsleep((caddr_t)&sb->sb_flags, sb->sb_mtx,
                    (sb->sb_flags & SB_NOINTR) ? PSOCK : PSOCK|PCATCH,
                    "sblock", 0);
                if (error) {
			mtx_exit(sb->sb_mtx, MTX_DEF);
                        return (error);
		}
        }
        sb->sb_flags |= SB_LOCK;
	mtx_exit(sb->sb_mtx, MTX_DEF);

Jake




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




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