cvs commit: src/sys/sys mutex.h

Jeff Roberson jroberson at chesapeake.net
Wed Oct 15 16:30:28 PDT 2003


On Wed, 15 Oct 2003, Robert Watson wrote:

>
> 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?

Commit!  I know of a great use for 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