<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Alexander,<br>
    <br>
    all your fixes (including the relevant subset of this one) are
    included in 4.3.22. Would be great if you could provide feedback if
    any deadlocks or other quirks are left.<br>
    <br>
    Regards,<br>
    Klaus<br>
    <div class="moz-cite-prefix">On 12.02.2015 12:42, <a class="moz-txt-link-abbreviated" href="mailto:a.urakov@drweb.com">a.urakov@drweb.com</a>
      wrote:<br>
    </div>
    <blockquote cite="mid:54DC9189.2080606@drweb.com" type="cite">
      <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
      Hi Klaus,<br>
      <br>
      you are right, if approved Medium lock order is "from parent to
      child", then there is nothing wrong in original VirtualBoxImpl.cpp
      code. Thanks a lot!<br>
      <br>
      Regards,<br>
      Alexander<br>
      <br>
      <div class="moz-cite-prefix">12.02.2015 14:22, Klaus Espenlaub
        пишет:<br>
      </div>
      <blockquote cite="mid:54DC8D05.70304@oracle.com" type="cite">
        <meta content="text/html; charset=UTF-8"
          http-equiv="Content-Type">
        Hi Alexander,<br>
        <br>
        this patch (the VirtualBoxImpl.cpp part) is loosening up
        synchronization a bit too much for my taste. The approved lock
        order for Medium instances is "from parent to child", which is
        why your MachineImpl.cpp change is a perfect catch (and
        solution, because the child lock is held unnecessarily).<br>
        <br>
        The VirtualBoxImpl.cpp part on the other hand uses the correct
        lock order, so I'm wondering if you have any evidence that this
        is actually solving any deadlock. Not disputing that the code
        should still work properly after the change (with a tiny bit
        less atomicity which isn't strictly required), but I suspect
        there was nothing wrong with it initially. If it played part of
        a deadlock then it's most likely the other party where the lock
        order is wrong. If you're running a debug build then the lock
        validator in the runtime is active and should catch anything
        fishy (unless it involves event semapshores as they have no
        owner).<br>
        <br>
        Feedback appreciated <span class="moz-smiley-s1"><span> :-) </span></span><br>
        <br>
        Klaus<br>
        <br>
        <br>
        <div class="moz-cite-prefix">On 30.01.2015 15:50, <a
            moz-do-not-send="true" class="moz-txt-link-abbreviated"
            href="mailto:a.urakov@drweb.com">a.urakov@drweb.com</a>
          wrote:<br>
        </div>
        <blockquote cite="mid:54CB9A32.8070604@drweb.com" type="cite">
          <meta content="text/html; charset=UTF-8"
            http-equiv="Content-Type">
          Diffs attached<br>
          <br>
          <div class="moz-cite-prefix">30.01.2015 17:49, <a
              moz-do-not-send="true" class="moz-txt-link-abbreviated"
              href="mailto:a.urakov@drweb.com">a.urakov@drweb.com</a>
            пишет:<br>
          </div>
          <blockquote cite="mid:54CB99FC.2090805@drweb.com" type="cite">
            <meta http-equiv="content-type" content="text/html;
              charset=UTF-8">
            Hello!<br>
            <br>
            We would like to contribute to VirtualBox under MIT license.
            We send our changes to fix bug described at <a
              moz-do-not-send="true" class="moz-txt-link-freetext"
              href="https://www.virtualbox.org/ticket/13789">https://www.virtualbox.org/ticket/13789</a>
            .<br>
            <br>
            The idea is that functions <i>Medium::removeRegistry()</i>
            and <i>Medium::addRegistry()</i> themselves take write
            locks on mediums, so we get read lock only for <i>Medium::getAnyMachineBackref()</i>
            call in <i>VirtualBox::unregisterMachine()</i> function.
            Also we release read lock on medium after we got its parent
            and before we are going to iterate through parents in <i>Machine::detachAllMedia()</i>
            function.<br>
            <br>
            Regards,<br>
            Alexander
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </body>
</html>