Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Dec 2006 13:41:15 +0100
From:      "Attilio Rao" <attilio@freebsd.org>
To:        "Martin Blapp" <mb@imp.ch>
Cc:        cvs-src@freebsd.org, src-committers@freebsd.org, cvs-all@freebsd.org
Subject:   Re: cvs commit: src/sys/kern tty.c
Message-ID:  <3bbf2fe10612200441i2f658b59i83de7c21c7290ab1@mail.gmail.com>
In-Reply-To: <20061220120419.M53548@godot.imp.ch>
References:  <200612192234.kBJMYYo0055529@repoman.freebsd.org> <3bbf2fe10612191850y3a546fcew486575385b1400df@mail.gmail.com> <20061220120419.M53548@godot.imp.ch>

next in thread | previous in thread | raw e-mail | index | archive | help
2006/12/20, Martin Blapp <mb@imp.ch>:
>
> Hi,
>
> > Since proctree_lock is a sx lock which uses 2 condition variables,
> > they alredy drop Giant (DROP_GIANT()) before sleeping. Are you secure
> > it is the right thing to do here?
>
> Yes I am.
>
> sx_slock() can call cv_wait() which later can call cv_wait_unlock ...
> if there is already a lock we need to share ... After a possible
> sleep cv_wait_unlock looks like:
>
> cv_wait_unlock(struct cv *cvp, struct mtx *mp)
>
> [...]
>         sleepq_lock(cvp);
>
>         cvp->cv_waiters++;
>         DROP_GIANT();
>         mtx_unlock(mp);
>
> [...]
>
> It can call DROP_GIANT for a short amount of time. This was the race.

No, it drops Giant for all the time it sleeps.
Maybe the race is somewhere else.

Attilio


-- 
Peace can only be achieved by understanding - A. Einstein



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