<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>This should work fine for the kind of deadlock detection we have in mind. </div><div><br></div><div>thanks,  Alex</div><div><br></div><div><br></div><br><div><div>On Jul 2, 2011, at 2:35 AM, Gary Byers wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>The only thing you can generally do (outside of a context like the kernel<br>debugger, where all other threads are stopped) is answer the question<br>"what thread owned this lock a few cycles ago, when I asked ?"  The answer<br>to that question is either useful or misleading, and there's no general<br>way of knowing which.<br><br>So, you can't write a LOCK-OWNER function that's guaranteed to return<br>a useful, trustworthy answer, but you can write a POSSIBLE-LOCK-OWNER<br>function that might be useful.<br><br>For a RECURSIVE-LOCK (something made by MAKE-LOCK),<br><br>(defun possible-recursive-lock-owner (lock)<br>  (let* ((tcr (ccl::%get-object (ccl::recursive-lock-ptr lock) target::lockptr.owner)))<br>    (unless (eql 0 tcr) (ccl::tcr->process tcr))))<br><br>That's almost trivial, and will often return a useful answer.  If we do:<br><br>? *current-process*<br>#<TTY-LISTENER listener(1) [Active] #x30200051AFED><br>? (let* ((lock (make-lock)))<br>  (with-lock-grabbed (lock) (possible-recursive-lock-owner lock)))<br>#<TTY-LISTENER listener(1) [Active] #x30200051AFED><br><br>then we can probably trust that answer completely.<br><br>If we ask "who owns a heavily contended global lock?", we have to understand<br>that that's not necessarily a meaningful question.  If we're really sure that<br>whoever owns the lock has owned it longer than we think it should have and<br>want to start to try to figure out why, then the answer is about as trustworthy<br>as our diagnosis of the problem.  I'm fairly sure that I've misdiagnosed<br>problems like this, and I've probably failed to take answers like this with<br>a large enough grain of salt.<br><br>The fact that POSSIBLE-RECURSIVE-LOCK-OWNER needs as many disclaimers<br>as it does may or may not justify the fact that it's never been<br>defined, but it has a lot to do with it.  It's also true that it can<br>give a useful and meaningful answer, and that probably is enough to<br>justify its existence (with lots of disclaimers that everyone will<br>get tired of hearing but are nonetheless valid.)<br><br><br><br><br><br>On Fri, 1 Jul 2011, Alexander Repenning wrote:<br><br><blockquote type="cite">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 <br></blockquote>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.<br><blockquote type="cite"><br></blockquote><blockquote type="cite">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?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Alex<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">_______________________________________________<br></blockquote><blockquote type="cite">Openmcl-devel mailing list<br></blockquote><blockquote type="cite"><a href="mailto:Openmcl-devel@clozure.com">Openmcl-devel@clozure.com</a><br></blockquote><blockquote type="cite"><a href="http://clozure.com/mailman/listinfo/openmcl-devel">http://clozure.com/mailman/listinfo/openmcl-devel</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote></div></blockquote></div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">Prof. Alexander Repenning</font></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px">University of Colorado</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Computer Science Department</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Boulder, CO 80309-430</p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">vCard: <a href="http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf">http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf</a></font></p><br class="Apple-interchange-newline"></span></span></span></span>
</div>
<br></body></html>