Problems related to Kaffe lockObjec/unlockObject
Zhu Wenzhang
wzzhu at csis.hku.hk
Tue Nov 20 00:10:10 PST 2001
Dear all,
In kaffe 1.0.6, the lockObject/unlockObject in locks.c are just a wrapper
of lockMutex/unlockMutex. In kaffe, lockObject uses "&obj" as the "where"
parameter in lockMutex. As the lockMutex and unlockMutex support recursive
locks, and determine whether it is a last unlock by the following checking :
if (lk->holder > where) {
putHeavyLock(lkp, lk);
...
}
So the value of "where" is important for the unlocking.
Now comes the problem. When we call LockObject(obj) in one stack frame, the
slot address for obj(i.e. &obj) is the address in the current frame. But
that slot address may be smaller than the stack address of object in a
subsequence call to unlockObj(obj); therefore that unlockObject(obj) will
mistakenly assume that that is a recursive lock and won't unlock the
object.
Any comments will be appreciated. Thanks.
Regards,
Zhu Wenzhang
More information about the kaffe
mailing list