Re: Strange lock-ups with simple E program

Mark Miller <[email protected]>
Newsgroups gmane.comp.lang.e.general
Message-ID <[email protected]>
Hi Thomas, thanks for tracking this down! This has been a long
standing irritation that I had not been able to diagnose. I hope to be
able to get to this either over the thanksgiving weekend or soon
thereafter.


On Tue, Nov 17, 2009 at 6:43 AM, Thomas Leonard
<tal-v5nx5w6akNyLE8xUarVfuPLx9OUvmyODWmv/[email protected]> wrote:
> OK, I think I'm making progress here. In BootRefHandler.packageArg(), we
> have:
>
>            //arg is EVENTUAL (or was at the time of the test), and is not
>            //handled by a BootRefHandler, so we treat it as a promise in the
>            //src vat.
>
>            BootRefHandler handler = new BootRefHandler(src, arg);
>            DelayedRedirector rdr = new DelayedRedirector(handler.myResolver);
>            //handler and rdr are in the dest vat
>            Object[] args = {packageArg(rdr, dest, src, currentVat)};
>            src.qSendAllOnly(arg, false, "__whenMoreResolved", args);
>            //Is it ok to ignore the E.sendOnly return result here?
>            return handler.myResolver.getProxy();
>
> DelayedRedirector will create either OldFarRef or OldRemotePromise
> objects, depending on whether "arg" has identity when it checks in its
> constructor.
>
> OldRemotePromise.setTarget will accept anything, but OldFarRef.setTarget
> complains if you try to set it.
>
> Adding a sleep makes it print the error message in all cases:
>
> diff --git a/src/jsrc/org/erights/e/elib/vat/BootRefHandler.java b/src/jsrc/org/erights/e/elib/vat/BootRefHandler.java
> index e6d0818..4ca874a 100644
> --- a/src/jsrc/org/erights/e/elib/vat/BootRefHandler.java
> +++ b/src/jsrc/org/erights/e/elib/vat/BootRefHandler.java
> @@ -239,6 +239,15 @@ class BootRefHandler implements EProxyHandler {
>             //handled by a BootRefHandler, so we treat it as a promise in the
>             //src vat.
>
> +           // TAL: but if it has an identity by the time we create BootRefHandler,
> +           // then it will be an OldFarRef, not an OldRemotePromise, and subscribing to
> +           // __whenMoreResolved will only cause trouble...
> +
> +           try {
> +                   Thread.sleep(200);
> +           } catch (Exception ex) {
> +           }
> +
>             BootRefHandler handler = new BootRefHandler(src, arg);
>             DelayedRedirector rdr = new DelayedRedirector(handler.myResolver);
>             //handler and rdr are in the dest vat
>
> I'm not sure what the correct fix is, though.
>
>
> On Sun, 2009-07-26 at 19:56 -0700, Mark Miller wrote:
>> Hi Thomas, I haven't found the bug yet, but I have narrowed it down to
>> a race condition bug in the boot-comm system. Your same stress test,
>> with your
>>
>>     def seedVat := seedVatAuthor(<unsafe>)
>>
>> replaced by
>>
>>     introducer.onTheAir()
>>     def seedVat := seedVatAuthor(<unsafe>).virtualize(introducer)
>>
>> seems to never lock up. The only difference between these is that the
>> latter uses captp instead of boot-comm. In the boot comm case, the
>> form of lock up looks like a lost signal: all vats are quiescent
>> waiting for a message. I have also discovered many things that the bug
>> is not ;). Unfortunately, the clues so far seem to point to a
>> multi-threading race condition bug.
>>
>> Unfortunately, I won't have time for further investigation for another
>> week. If you're blocked on this, might the above change be a useful
>> workaround for you?
>>
>
>
> --
> Dr Thomas Leonard
> IT Innovation Centre
> 2 Venture Road
> Southampton
> Hampshire SO16 7NP
>
> Tel: +44 0 23 8076 0834
> Fax: +44 0 23 8076 0833
> mailto:tal-v5nx5w6akNyLE8xUarVfuPLx9OUvmyODWmv/[email protected]
> http://www.it-innovation.soton.ac.uk
>
> _______________________________________________
> e-lang mailing list
> [email protected]
> http://www.eros-os.org/mailman/listinfo/e-lang
>



-- 
Text by me above is hereby placed in the public domain

    Cheers,
    --MarkM
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.