[Openmcl-devel] lock owner: how to access?

Alexander Repenning ralex at cs.colorado.edu
Tue Jul 5 10:46:07 PDT 2011


This should work fine for the kind of deadlock detection we have in mind. 

thanks,  Alex



On Jul 2, 2011, at 2:35 AM, Gary Byers wrote:

> The only thing you can generally do (outside of a context like the kernel
> debugger, where all other threads are stopped) is answer the question
> "what thread owned this lock a few cycles ago, when I asked ?"  The answer
> to that question is either useful or misleading, and there's no general
> way of knowing which.
> 
> So, you can't write a LOCK-OWNER function that's guaranteed to return
> a useful, trustworthy answer, but you can write a POSSIBLE-LOCK-OWNER
> function that might be useful.
> 
> For a RECURSIVE-LOCK (something made by MAKE-LOCK),
> 
> (defun possible-recursive-lock-owner (lock)
>  (let* ((tcr (ccl::%get-object (ccl::recursive-lock-ptr lock) target::lockptr.owner)))
>    (unless (eql 0 tcr) (ccl::tcr->process tcr))))
> 
> That's almost trivial, and will often return a useful answer.  If we do:
> 
> ? *current-process*
> #<TTY-LISTENER listener(1) [Active] #x30200051AFED>
> ? (let* ((lock (make-lock)))
>  (with-lock-grabbed (lock) (possible-recursive-lock-owner lock)))
> #<TTY-LISTENER listener(1) [Active] #x30200051AFED>
> 
> then we can probably trust that answer completely.
> 
> If we ask "who owns a heavily contended global lock?", we have to understand
> that that's not necessarily a meaningful question.  If we're really sure that
> whoever owns the lock has owned it longer than we think it should have and
> want to start to try to figure out why, then the answer is about as trustworthy
> as our diagnosis of the problem.  I'm fairly sure that I've misdiagnosed
> problems like this, and I've probably failed to take answers like this with
> a large enough grain of salt.
> 
> The fact that POSSIBLE-RECURSIVE-LOCK-OWNER needs as many disclaimers
> as it does may or may not justify the fact that it's never been
> defined, but it has a lot to do with it.  It's also true that it can
> give a useful and meaningful answer, and that probably is enough to
> justify its existence (with lots of disclaimers that everyone will
> get tired of hearing but are nonetheless valid.)
> 
> 
> 
> 
> 
> On Fri, 1 Jul 2011, Alexander Repenning wrote:
> 
>> In cases where some kind of deadlock includes the user/"initial" thread CCL becomes unresponsive (understandably and justifiably). OS X will show the spinning beach ball and there is not much left for the user to do other than to force quit the app. However, a separate "deadlock detection" thread can continue even in these situations and could 
> do a little introspection of threads and locks to potentially detect a deadlock situation. This could be very useful for debugging as it could spit out some into into alt console.
>> 
>> Question: there is some introspection that could be done on threads/processes but what about locks? If, say, process p1 grabs lock l1, is there a way to access this information? In other words, how would one write a (grabbed-by <lock>) function?
>> 
>> Alex
>> 
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
>> 
>> 

Prof. Alexander Repenning

University of Colorado
Computer Science Department
Boulder, CO 80309-430

vCard: http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20110705/6bd206f4/attachment.htm>


More information about the Openmcl-devel mailing list