cvs commit: src/sys/sys mutex.h
Robert Watson
rwatson at FreeBSD.org
Wed Oct 15 15:04:23 PDT 2003
On Tue, 14 Oct 2003, John Baldwin wrote:
> > I know it is racy in most contexts. I use it to check to see if a thread
> > on the runq owns giant. Since I have the sched lock it isn't racy but
> > even if it was it wouldn't matter in this case.
>
> sched lock doesn't keep it from being racy. Uncontested acquire and
> releases don't go anywhere near sched lock. Are you checking a
> non-curthread thread pointer? Maybe you could just do it for curthread
> and that would be enough for your heuristic, i.e.
>
> if (thread == curthread && mtx_owned(&Giant)) {
> ...
> }
>
> I'm just worried that if this is there someone is going to use it. :(
You mean like this?
while (mtx_trylock(&my_favorite_mtx)) {
int gotthebastard;
struct thread *td;
struct proc *p;
gotthebastard = 0;
sx_slock(&allproc_lock);
LIST_FOREACH(p, &allproc, p_list) {
PROC_LOCK(p);
FOREACH_THREAD_IN_PROC(p, td) {
if (mtx_ownedby(&my_favorite_mtx, td)) {
psignal(p, SIGKILL);
gotthebastard = 1;
break;
}
}
PROC_UNLOCK(p);
if (gotthebastard)
break;
}
sx_sunlock(&allproc_lock);
printf("Someone else owned the mutex, but I got the bastard\n");
}
Robert N M Watson FreeBSD Core Team, TrustedBSD Projects
robert at fledge.watson.org Network Associates Laboratories
More information about the cvs-src
mailing list