cvs commit: src/sys/kern lwkt_token.c src/sys/sys thread2.h
Matthew Dillon
dillon at crater.dragonflybsd.org
Sun Jun 19 14:51:18 PDT 2005
dillon 2005/06/19 14:50:50 PDT
DragonFly src repository
Modified files:
sys/kern lwkt_token.c
sys/sys thread2.h
Log:
Fix two bugs in the LWKT token code.
(1) When releasing a token reference we cannot give away the token to
another cpu if we are still holding it via a another reference. This
can cause recursive token references to silently fail when the inner
reference is released. It is unclear where such references exist and
a temporary printf has been added to identify occurances.
(2) When obtaining a token reference if the underlying token was not owned
by the current cpu we spun to gain ownership, but then failed to check
whether the token was being held by a preempted thread.
This can result in a preempting thread holding a token also being held
by an underyling thread. Theoretically, this case can only
occur if the preempted thread was is the process of obtaining the
token in question since otherwise (by definition) our cpu will already
own the token. On return the preempted thread will check and obtain
ownership. However, the situation is complex enough that we really
need to check unconditionally.
Revision Changes Path
1.16 +83 -40 src/sys/kern/lwkt_token.c
1.20 +3 -0 src/sys/sys/thread2.h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/lwkt_token.c.diff?r1=1.15&r2=1.16&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/thread2.h.diff?r1=1.19&r2=1.20&f=u
More information about the Commits
mailing list