Re: Using Vine in 3-way interactions (was Re: Question on redirectors/whenMoreResolved in the 3-way case, in the middle vat)

"Mark S. Miller" <[email protected]> Wed, 18 Nov 2015 14:40:28 -0500
Newsgroups gmane.comp.lang.e.general
Message-ID <CABHxS9gg5RXPSxmC8xKd2ce+XcFBUm5VZyRqy1qVGyLoe7=Owg@mail.gmail.com>
--===============6790961531683999032==
Content-Type: multipart/alternative; boundary=001a1143fc448377270524d5d025

--001a1143fc448377270524d5d025
Content-Type: text/plain; charset=UTF-8

Note that this is an old message that may be redundant with other messages
from around the same time. I do not know why this one was stuck in the
moderator queue or why I had not noticed it till now. I did just notice it
and release it. Sorry for the temporal confusion.




On Sat, Mar 7, 2015 at 7:28 PM, Rob Withers <[email protected]>
wrote:

> I truly hope not, Mark.  I have this tendency to explicitly burn bridges
> when I perceive they are burned, to clarify and out of frustration that I
> keep bouncing.  My apologies for that as it helps no one, as well as my
> lack of patience for a response.  I had not realized I had posted such a
> challenging question.
>
> In consideration, if I may suggest the following.
>
>
>    1. Carol sends to Alice with a ref to Bob and Alice redirects a call
>    to Bob, returning a RemotePromise both in Carol and in Alice.
>    2. 3-way: Carol sends a provideFor to Bob and Alice sends an
>    AcceptFrom to Bob.
>    3. Carol sends a followOn to Alice's first resolution, which is a
>    RemotePromise to Bob, so this flows to Bob.
>    4. 3-way: In Alice, the followOn should become a 3-way to the followOn
>    Resolver in Carol.  So Alice would send a provideFor to Carol and Bob would
>    send an AcceptFrom to Carol and send the result of the followOn to the gift
>    resolver in Carol.
>
> I think I am saying this the way I am thinking it.
>
> Thank you.
>
>
> On 3/7/2015 5:07 PM, Mark S. Miller wrote:
>
> Wait wait apologies! You did nothing at all to offend! Really!
>
> I was just saying to a current houseguest last night, as close as I can
> remember:
>
> "Have you seen the question Rob Withers has asked lately on e-lang about
> captp? It relates to race conditions and GC, but I haven't yet been able to
> reload enough context to think about it. Could you have a look?" We then
> went off on a long discussion on race conditions in captp-like systems x gc
> x partition x malice, how difficult it is to do a full case analysis of the
> cross product by hand, and how much automated tools could help. Sadly, we
> did not get back to the subject of your question.
>
> True story. I am posting this without first checking with the houseguest,
> which is why I'm omitting their name.
>
> I should have said something to explain my lack of response. The rudeness
> really is mine.
>
>
>
>
> On Sat, Mar 7, 2015 at 3:28 PM, Rob Withers <[email protected]>
> wrote:
>
>> Thanks for all the reticent help over the years, everyone.  It's been
>> fun.  Such a pity that that help seems permanently revoked, like an
>> untrusted capability.  I must not have participated well in the social
>> context, but that is par for the course for folks with Aspergers, I am
>> learning.  I just can't ever seem to say the right thing and more often
>> than not, I piss people off.  The issue is I truly just don't get it.
>>
>> Best regards,
>> Robert
>>
>> On 3/4/2015 9:27 AM, Rob Withers wrote:
>>
>> Might someone be able to comment on this, please?  It would help me a
>> great deal.  I do not think it is the unimplemented far3Desc situation.
>>
>> Thanks,
>> Robert
>>
>> On 3/1/2015 3:12 PM, Rob Withers wrote:
>>
>> I see.  Could you comment on how a Vine (and promise3Desc/far3Desc) get
>> introduced into the machinery when a followOn msg gets forwarded to a third
>> vat?  In my example, redirectForTheAnswer sends getTheAnswer to Bob and
>> returns a RemotePromise, which receives a hashCode followOn msg, forwarded
>> to Bob.
>>
>> - Robert
>>
>> On 3/1/2015 2:56 PM, Mark S. Miller wrote:
>>
>> No, the 2-vat interactions never use, or engage in any way with, vines,
>> promise3Desc or far3Desc.
>>
>>
>> On Sun, Mar 1, 2015 at 9:37 AM, Robert Withers <
>> [email protected]> wrote:
>>
>>> I have a question about elib. Do you use promise3Desc and far3Desc for
>>> 2-vat interactions such that a vine is always in play in any interaction?
>>>
>>> - Robert
>>>
>>>
>>> Rob Withers <[email protected]> wrote:
>>>
>>> Mark, your instincts were right on, it seems.  I have an issue with my
>>> use of the Vine and on reflection it makes perfect sense. I am bending the
>>> send from Carol to Alice over to Bob, so as it is a 3-way interaction, I
>>> need a Vine.  In analyzing ELib code, you have 9 references to the Vine's
>>> constructor, while I only have 7 (minus an extra unused constructor I
>>> have).  It is going to require some digging to unearth what I am missing,
>>> but the direction is clear.  The place it blows up is in my
>>> ProxyResolver.resolve() method, as the WeakReference has lost the ref.
>>> However, this is not where the reference is maintained.  I suspect it may
>>> be a lack of an IdentityManager.
>>>
>>> I republished my code to: https://github.com/tooantuh/pauwau.  The
>>> tests pass, though there is an issue with the RefTests and
>>> TestPauwau2VatException, as well as this issue affecting
>>> TestPauwau3VatFollowOnSend.  Additionally, the presentation tests need to
>>> be run one at a time as stopping and starting the Introducers can step on
>>> each other.
>>>
>>> thank you,
>>> Robert
>>>
>>> On 2/22/2015 8:02 PM, Mark S. Miller wrote:
>>>
>>> Have you looked at the Vine? Search for "Vine" at
>>> http://erights.org/elib/distrib/captp/index.html
>>> and in the source code of https://code.google.com/p/caja-captp/
>>>
>>> I don't quite understand your question, so I'm not sure if this is even
>>> relevant to the answer. Is it?
>>>
>>>
>>>
>>> On Sun, Feb 22, 2015 at 5:51 PM, Rob Withers <[email protected]
>>> > wrote:
>>>
>>>> I found some more info: it looks as if the Ref in Alice's ProxyResolver
>>>> is being GCed, before resolution from Bob.  This is specific to my
>>>> machinery, but knowing how Elib maintains a reference to the Ref, in this
>>>> case, may help make mine better. How does Elib handle this?
>>>>
>>>> Thank you,
>>>> - Robert
>>>>
>>>>
>>>> On 2/22/2015 6:19 PM, Rob Withers wrote:
>>>>
>>>> I am stuck, both conceptually, as well as understanding code I wrote a
>>>> long while ago.  I was hoping to gain a little insight from the list of the
>>>> insides of resolution redirection in the 3-way case.  The recent change I
>>>> have made results from my thinking I finally understand the ordering that
>>>> MirandaMethods ensure.  I made changes such that a whenMoreResolved
>>>> directly follows the message that generates is by adding to the front of
>>>> the msg queue.
>>>>
>>>> In the 3-way case, Carol is sending a message to Alice, passing Bob.
>>>> Alice receives the message and executes, which sends a message to Bob, then
>>>> returns the result to Carol.  In Alice's vat, the DelayedRedirector is
>>>> resolved to the RemotePromise of the call to Bob, the return of Alice's
>>>> computation and I think it sends whenMoreResolved to the proxy of the new
>>>> promise resolver of the send to Bob.  What little tracing I have I am
>>>> posting below, as well as the DelayedRedirector value() and the
>>>> ProxyResolver resolve() code, at the bottom.  However, this is my question,
>>>> what should the redirector do in Alice's Vat to propagate the resolution
>>>> from Bob, back to Carol?
>>>>
>>>> Thank you,
>>>> - Robert
>>>>
>>>>
>>>> // There are 3 messages sent to Bob, from Alice:
>>>> //     1) getTheAnswer, which returns 42,
>>>> //     2) *hashCode, again 42* and
>>>> //     3) *whenMoreResolved*, to forward to the redirector back in
>>>> Alice.
>>>>
>>>> 0 [main] INFO cc.ganymede.pauwau.presentation.AbstractPauwauTest  - 3
>>>> Introducers starting
>>>> 549 [main] INFO cc.ganymede.pauwau.presentation.AbstractPauwauTest  - 3
>>>> Introducers on the air
>>>> 4553 [main] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal  -
>>>> sending message: DeliverMessage(receiverId: 0 answerId: -1 resolverId: -1
>>>> action: lookupSwiss args:
>>>> [497273074681788564315291637588644948944089734358])
>>>> 4952 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: 0 answerId: -1 resolverId:
>>>> null action: lookupSwiss args:
>>>> [497273074681788564315291637588644948944089734358])
>>>> 4958 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverOnlyMessage(receiverId: 1 action: value args:
>>>> [NearRefImpl(hash: 109537538, receiver: TestObject)])
>>>> 4998 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 1 action: value args:
>>>> [FarRefImpl(hash: 68783569)])
>>>> 5353 [main] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal  -
>>>> sending message: DeliverMessage(receiverId: 0 answerId: -1 resolverId: -1
>>>> action: lookupSwiss args:
>>>> [-686254831702855955980329529540587585277617841038])
>>>> 5593 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: 0 answerId: -1 resolverId:
>>>> null action: lookupSwiss args:
>>>> [-686254831702855955980329529540587585277617841038])
>>>> 5593 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverOnlyMessage(receiverId: 1 action: value args:
>>>> [NearRefImpl(hash: 1530099003, receiver: TestObject)])
>>>> 6201 [main] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal  -
>>>> sending message: DeliverMessage(receiverId: -1 answerId: -2 resolverId: -2
>>>> action: redirectForTheAnswer args: [RemotePromiseRefImpl(hash: 1034568234)])
>>>> 6203 [main] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal  -
>>>> sending message: DeliverMessage(receiverId: 0 answerId: -2 resolverId: -2
>>>> action: provideFor args:
>>>> [-568687285196004884954480990488973591228663758441,
>>>> RemotePromiseRefImpl(hash: 1034568234),
>>>> -676914875674370369045480105305401075435688776666])
>>>> 6239 [main] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal  -
>>>> sending message: DeliverMessage(receiverId: -2 answerId: -3 resolverId: -3
>>>> action: hashCode args: [])
>>>> 6255 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: 0 answerId: -2 resolverId:
>>>> null action: provideFor args:
>>>> [-568687285196004884954480990488973591228663758441, NearRefImpl(hash:
>>>> 1530099003, receiver: TestObject),
>>>> -676914875674370369045480105305401075435688776666])
>>>> 6259 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverOnlyMessage(receiverId: 2 action: value args:
>>>> [NearRefImpl(hash: 1323165787, receiver:
>>>> cc.ganymede.pauwau.presentation.lib.vat.Vine@4842def1)])
>>>> 6403 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverMessage(receiverId: 0 answerId: -1 resolverId: -1
>>>> action: acceptFrom args:
>>>> [HouseAtreides:10003/-687934017861573292334955567350102524989066643525,
>>>> -676914875674370369045480105305401075435688776666,
>>>> cc.ganymede.pauwau.presentation.lib.vat.Vine@6a8400ff])
>>>> 6410 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: -1 answerId: -2 resolverId:
>>>> null action: redirectForTheAnswer args: [RemotePromiseRefImpl(hash:
>>>> 598908224)])
>>>> 6411 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: -2 answerId: -3 resolverId:
>>>> null action: hashCode args: [])
>>>> 6411 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverMessage(receiverId: -1 answerId: -2 resolverId:
>>>> -2 action: getTheAnswer args: [])
>>>> 6412 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverMessage(receiverId: -2 answerId: -3 resolverId:
>>>> -3 action: hashCode args: [])
>>>> 6412 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverOnlyMessage(receiverId: -2 action:
>>>> whenMoreResolved args: [RedirectorProxy: FarRefImpl(hash: 177595052)])
>>>> 6766 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: 0 answerId: -1 resolverId:
>>>> null action: acceptFrom args:
>>>> [HouseAtreides:10003/-687934017861573292334955567350102524989066643525,
>>>> -676914875674370369045480105305401075435688776666, FarRefImpl(hash:
>>>> 690984748)])
>>>> 6767 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: -1 answerId: -2 resolverId:
>>>> null action: getTheAnswer args: [])
>>>> 6767 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverMessage(receiverId: -2 answerId: -3 resolverId:
>>>> null action: hashCode args: [])
>>>> 6767 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: -2 action:
>>>> whenMoreResolved args: [NearRefImpl(hash: 363771261, receiver:
>>>> RedirectorProxy: FarRefImpl(hash: 196981675))])
>>>> 6768 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverOnlyMessage(receiverId: 2 action: value args:
>>>> [NearRefImpl(hash: 1530099003, receiver: TestObject)])
>>>> 6769 [second-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverOnlyMessage(receiverId: 3 action: value args:
>>>> [NearRefImpl(hash: 790206055, receiver: 42)])
>>>> *6770 [second-vat] DEBUG
>>>> cc.ganymede.pauwau.presentation.PauwauTerminal  - sending message:
>>>> DeliverOnlyMessage(receiverId: 4 action: value args: [NearRefImpl(hash:
>>>> 878991039, receiver: 42)])*
>>>> *6771 [second-vat] DEBUG
>>>> cc.ganymede.pauwau.presentation.PauwauTerminal  - sending message:
>>>> DeliverOnlyMessage(receiverId: 5 action: value args: [NearRefImpl(hash:
>>>> 790206055, receiver: 42)])*
>>>> 6805 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 2 action: value args:
>>>> [FarRefImpl(hash: 1332394016)])
>>>> 6805 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 3 action: value args:
>>>> [42])
>>>> *6805 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 4 action: value args:
>>>> [42])*
>>>> *6805 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 5 action: value args:
>>>> [42])*
>>>> 6806 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: DeliverOnlyMessage(receiverId: 3 action: value args:
>>>> [42])
>>>> 19932 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: GCAnswerMessage(answerId: -1)
>>>> 19934 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: GCAnswerMessage(answerId: -2)
>>>> 19934 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: GCAnswerMessage(answerId: -3)
>>>> 19984 [second-vat] DEBUG
>>>> cc.ganymede.pauwau.presentation.PauwauTerminal  - receiving message:
>>>> GCAnswerMessage(answerId: -1)
>>>> 19984 [second-vat] DEBUG
>>>> cc.ganymede.pauwau.presentation.PauwauTerminal  - receiving message:
>>>> GCAnswerMessage(answerId: -2)
>>>> 19985 [second-vat] DEBUG
>>>> cc.ganymede.pauwau.presentation.PauwauTerminal  - receiving message:
>>>> GCAnswerMessage(answerId: -3)
>>>> 29679 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: GCAnswerMessage(answerId: -1)
>>>> 29680 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 1 action: value args:
>>>> [FarRefImpl(hash: 734824022)])
>>>> 29680 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 2 action: value args:
>>>> [FarRefImpl(hash: 1223086084)])
>>>> 29680 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: DeliverOnlyMessage(receiverId: 3 action: value args:
>>>> [42])
>>>> 29681 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: GCAnswerMessage(answerId: -1)
>>>> 29681 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: GCAnswerMessage(answerId: -2)
>>>> 29682 [third-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - sending message: GCAnswerMessage(answerId: -2)
>>>> 29722 [second-vat] DEBUG
>>>> cc.ganymede.pauwau.presentation.PauwauTerminal  - receiving message:
>>>> GCAnswerMessage(answerId: -1)
>>>> 29722 [second-vat] DEBUG
>>>> cc.ganymede.pauwau.presentation.PauwauTerminal  - receiving message:
>>>> GCAnswerMessage(answerId: -2)
>>>> 29726 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: GCAnswerMessage(answerId: -1)
>>>> 29726 [first-vat] DEBUG cc.ganymede.pauwau.presentation.PauwauTerminal
>>>> - receiving message: GCAnswerMessage(answerId: -2)
>>>>
>>>>
>>>>
>>>> *// DelayedRedirector code:*
>>>>     public void value(Object obj) throws NotResolvedException {
>>>>         if(resolver == null)
>>>>             return;
>>>>
>>>>         if(resolver.isFresh()) {
>>>>             resolver.resolve(obj);
>>>>             resolver = null;
>>>>             return;
>>>>         }
>>>>
>>>>         if(RefUtil.isLocal(obj)) {
>>>>             resolver.resolve(obj);
>>>>             resolver = null;
>>>>             return;
>>>>         }
>>>>
>>>>         Ref ref = (Ref)RefUtil.wrap(obj, resolver.handler.getVat());
>>>>         boolean isLocalToResolverScope = false;
>>>>         try {
>>>>             isLocalToResolverScope =
>>>> RefUtil.isLocalToScope(resolver.handler.scope, ref);
>>>>             if(isLocalToResolverScope) {
>>>>                 resolver.resolve(obj);
>>>>                 resolver = null;
>>>>                 return;
>>>>             }
>>>>         } catch (Exception e) {
>>>>             reactToLostClient(e);
>>>>         }
>>>>
>>>>         Pair<PromiseRefImpl, Resolver> pair =
>>>> RefUtil.promise(ref.getVat());
>>>>         Redirector redirector = new Redirector((ProxyResolver)
>>>> pair.second());
>>>>         resolver.getProxy().whenResolved(redirector);
>>>>         resolver.resolve(pair.first());
>>>>         resolver = null;
>>>>     }
>>>>
>>>>
>>>> *// ProxyResolver code:*
>>>>     public void resolve(final Object result) throws
>>>> NotResolvedException {
>>>>         handler.scope.getVat().sendRunnable(new Runnable() {
>>>>             public void run() {
>>>>                 if(ref == null)
>>>>                     return;
>>>>                 if(ref.get() == null)
>>>>                     return;
>>>>                 if(Exception.class.isAssignableFrom(result.getClass()))
>>>> {
>>>>                 }
>>>>                 Ref newRef = RefUtil.wrap(result,
>>>> handler.scope.getVat());
>>>>                 try {
>>>>                     if (newRef == null)
>>>>                             ref.get().getRefImpl().becomeContext(null);
>>>>                     else
>>>>
>>>> ref.get().getRefImpl().becomeContext(newRef.getRefImpl());
>>>>                     if(RefUtil.isResolved(newRef.getRefImpl())) {
>>>>                         handler = null;
>>>>                         ref = null;
>>>>                     }
>>>>                 } catch (NotResolvedException e) {
>>>>                     // TODO Auto-generated catch block
>>>>                     e.printStackTrace();
>>>>                 }
>>>>             }});
>>>>     }
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> e-lang mailing list
>>>> [email protected]
>>>> http://www.eros-os.org/mailman/listinfo/e-lang
>>>>
>>>>
>>>
>>>
>>> --
>>>     Cheers,
>>>     --MarkM
>>>
>>>
>>> _______________________________________________
>>> e-lang mailing [email protected]://www.eros-os.org/mailman/listinfo/e-lang
>>>
>>>
>>>
>>> _______________________________________________
>>> e-lang mailing list
>>> [email protected]
>>> http://www.eros-os.org/mailman/listinfo/e-lang
>>>
>>>
>>
>>
>> --
>>     Cheers,
>>     --MarkM
>>
>>
>> _______________________________________________
>> e-lang mailing [email protected]://www.eros-os.org/mailman/listinfo/e-lang
>>
>>
>>
>>
>>
>> _______________________________________________
>> e-lang mailing list
>> [email protected]
>> http://www.eros-os.org/mailman/listinfo/e-lang
>>
>>
>
>
> --
>     Cheers,
>     --MarkM
>
>
> _______________________________________________
> e-lang mailing [email protected]://www.eros-os.org/mailman/listinfo/e-lang
>
>
>
> _______________________________________________
> e-lang mailing list
> [email protected]
> http://www.eros-os.org/mailman/listinfo/e-lang
>
>


-- 
    Cheers,
    --MarkM

--001a1143fc448377270524d5d025
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Note that this is an old message that may be redundant wit=
h other messages from around the same time. I do not know why this one was =
stuck in the moderator queue or why I had not noticed it till now. I did ju=
st notice it and release it. Sorry for the temporal confusion.<div><br></di=
v><div><br><div><br></div></div></div><div class=3D"gmail_extra"><br><div c=
lass=3D"gmail_quote">On Sat, Mar 7, 2015 at 7:28 PM, Rob Withers <span dir=
=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank=
">[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"=
gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-=
left:1ex">
 =20
   =20
 =20
  <div bgcolor=3D"#FFFFFF" text=3D"#000000">
    I truly hope not, Mark.=C2=A0 I have this tendency to explicitly burn
    bridges when I perceive they are burned, to clarify and out of
    frustration that I keep bouncing.=C2=A0 My apologies for that as it hel=
ps
    no one, as well as my lack of patience for a response.=C2=A0 I had not
    realized I had posted such a challenging question.<br>
    <br>
    In consideration, if I may suggest the following.<br>
    <br>
    <ol>
      <li>Carol sends to Alice with a ref to Bob and Alice redirects a
        call to Bob, returning a RemotePromise both in Carol and in
        Alice.</li>
      <li>3-way: Carol sends a provideFor to Bob and Alice sends an
        AcceptFrom to Bob.</li>
      <li>Carol sends a followOn to Alice&#39;s first resolution, which is =
a
        RemotePromise to Bob, so this flows to Bob.</li>
      <li>3-way: In Alice, the followOn should become a 3-way to the
        followOn Resolver in Carol.=C2=A0 So Alice would send a provideFor =
to
        Carol and Bob would send an AcceptFrom to Carol and send the
        result of the followOn to the gift resolver in Carol. </li>
    </ol>
    I think I am saying this the way I am thinking it.<br>
    <br>
    Thank you.<div><div class=3D"h5"><br>
    <br>
    <div>On 3/7/2015 5:07 PM, Mark S. Miller
      wrote:<br>
    </div>
    <blockquote type=3D"cite">
      <div dir=3D"ltr">Wait wait apologies! You did nothing at all to
        offend!=C2=A0Really!
        <div><br>
        </div>
        <div>I was just saying to a current houseguest last night, as
          close as I can remember:</div>
        <div><br>
        </div>
        <div>&quot;Have you seen the question Rob Withers has asked lately =
on
          e-lang about captp? It relates to race conditions and GC, but
          I haven&#39;t yet been able to reload enough context to think
          about it. Could you have a look?&quot; We then went off on a long
          discussion on race conditions in captp-like systems x gc x
          partition x malice, how difficult it is to do a full case
          analysis of the cross product by hand, and how much automated
          tools could help. Sadly, we did not get back to the subject of
          your question.</div>
        <div><br>
        </div>
        <div>True story. I am posting this without first checking with
          the houseguest, which is why I&#39;m omitting their name.</div>
        <div><br>
        </div>
        <div>I should have said something to explain my lack of
          response. The rudeness really is mine.</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
      </div>
      <div class=3D"gmail_extra"><br>
        <div class=3D"gmail_quote">On Sat, Mar 7, 2015 at 3:28 PM, Rob
          Withers <span dir=3D"ltr">&lt;<a href=3D"mailto:robert.w.withers@=
gmail.com" target=3D"_blank">[email protected]</a>&gt;</span>
          wrote:<br>
          <blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bord=
er-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor=3D"#FFFFFF" text=3D"#000000"> Thanks for all the
              reticent help over the years, everyone.=C2=A0 It&#39;s been f=
un.=C2=A0
              Such a pity that that help seems permanently revoked, like
              an untrusted capability.=C2=A0 I must not have participated
              well in the social context, but that is par for the course
              for folks with Aspergers, I am learning.=C2=A0 I just can&#39=
;t
              ever seem to say the right thing and more often than not,
              I piss people off.=C2=A0 The issue is I truly just don&#39;t =
get
              it.=C2=A0 <br>
              <br>
              Best regards, <br>
              <div>Robert</div>
              <div>
                <div> <br>
                  <div>On 3/4/2015 9:27 AM, Rob Withers wrote:<br>
                  </div>
                  <blockquote type=3D"cite"> Might someone be able to
                    comment on this, please?=C2=A0 It would help me a great
                    deal.=C2=A0 I do not think it is the unimplemented
                    far3Desc situation.<br>
                    <br>
                    Thanks,<br>
                    Robert<br>
                    <br>
                    <div>On 3/1/2015 3:12 PM, Rob Withers wrote:<br>
                    </div>
                    <blockquote type=3D"cite"> I see.=C2=A0 Could you comme=
nt
                      on how a Vine (and promise3Desc/far3Desc) get
                      introduced into the machinery when a followOn msg
                      gets forwarded to a third vat?=C2=A0 In my example,
                      redirectForTheAnswer sends getTheAnswer to Bob and
                      returns a RemotePromise, which receives a hashCode
                      followOn msg, forwarded to Bob.<br>
                      <br>
                      - Robert<br>
                      <br>
                      <div>On 3/1/2015 2:56 PM, Mark S. Miller wrote:<br>
                      </div>
                      <blockquote type=3D"cite">
                        <div dir=3D"ltr">No, the 2-vat interactions never
                          use, or engage in any way with, vines,
                          promise3Desc or far3Desc.
                          <div><br>
                          </div>
                        </div>
                        <div class=3D"gmail_extra"><br>
                          <div class=3D"gmail_quote">On Sun, Mar 1, 2015
                            at 9:37 AM, Robert Withers <span dir=3D"ltr">&l=
t;<a href=3D"mailto:[email protected]" target=3D"_blank">robert.w.=
[email protected]</a>&gt;</span>
                            wrote:<br>
                            <blockquote class=3D"gmail_quote" style=3D"marg=
in:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have a
                              question about elib. Do you use
                              promise3Desc and far3Desc for 2-vat
                              interactions such that a vine is always in
                              play in any interaction?<br>
                              <br>
                              - Robert
                              <div>
                                <div><br>
                                  <br>
                                  Rob Withers &lt;<a href=3D"mailto:robert.=
[email protected]" target=3D"_blank">[email protected]</a>&gt;

                                  wrote:<br>
                                  <br>
                                  Mark, your instincts were right on, it
                                  seems.=C2=A0 I have an issue with my use =
of
                                  the Vine and on reflection it makes
                                  perfect sense. I am bending the send
                                  from Carol to Alice over to Bob, so as
                                  it is a 3-way interaction, I need a
                                  Vine.=C2=A0 In analyzing ELib code, you
                                  have 9 references to the Vine&#39;s
                                  constructor, while I only have 7
                                  (minus an extra unused constructor I
                                  have).=C2=A0 It is going to require some
                                  digging to unearth what I am missing,
                                  but the direction is clear.=C2=A0 The pla=
ce
                                  it blows up is in my
                                  ProxyResolver.resolve() method, as the
                                  WeakReference has lost the ref.=C2=A0
                                  However, this is not where the
                                  reference is maintained.=C2=A0 I suspect =
it
                                  may be a lack of an IdentityManager.<br>
                                  <br>
                                  I republished my code to: <a href=3D"http=
s://github.com/tooantuh/pauwau" target=3D"_blank">https://github.com/tooant=
uh/pauwau</a>.=C2=A0



                                  The tests pass, though there is an
                                  issue with the RefTests and
                                  TestPauwau2VatException, as well as
                                  this issue affecting
                                  TestPauwau3VatFollowOnSend.=C2=A0
                                  Additionally, the presentation tests
                                  need to be run one at a time as
                                  stopping and starting the Introducers
                                  can step on each other.<br>
                                  <br>
                                  thank you,<br>
                                  Robert<br>
                                  <br>
                                  <div>On 2/22/2015 8:02 PM, Mark S.
                                    Miller wrote:<br>
                                  </div>
                                  <blockquote type=3D"cite">
                                    <div dir=3D"ltr">Have you looked at
                                      the Vine? Search for &quot;Vine&quot;=
 at=C2=A0<a href=3D"http://erights.org/elib/distrib/captp/index.html" targe=
t=3D"_blank">http://erights.org/elib/distrib/captp/index.html</a>
                                      <div>and in the source code of=C2=A0<=
a href=3D"https://code.google.com/p/caja-captp/" target=3D"_blank">https://=
code.google.com/p/caja-captp/</a></div>
                                      <div><br>
                                      </div>
                                      <div>I don&#39;t quite understand you=
r
                                        question, so I&#39;m not sure if
                                        this is even relevant to the
                                        answer. Is it?</div>
                                      <div><br>
                                      </div>
                                      <div><br>
                                      </div>
                                    </div>
                                    <div class=3D"gmail_extra"><br>
                                      <div class=3D"gmail_quote">On Sun,
                                        Feb 22, 2015 at 5:51 PM, Rob
                                        Withers <span dir=3D"ltr">&lt;<a hr=
ef=3D"mailto:[email protected]" target=3D"_blank">robert.w.withers=
@gmail.com</a>&gt;</span>
                                        wrote:<br>
                                        <blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                                          <div bgcolor=3D"#FFFFFF" text=3D"=
#000000"> I found some
                                            more info: it looks as if
                                            the Ref in Alice&#39;s
                                            ProxyResolver is being GCed,
                                            before resolution from Bob.=C2=
=A0
                                            This is specific to my
                                            machinery, but knowing how
                                            Elib maintains a reference
                                            to the Ref, in this case,
                                            may help make mine better.
                                            How does Elib handle this?<br>
                                            <br>
                                            Thank you,<br>
                                            - Robert
                                            <div>
                                              <div><br>
                                                <br>
                                                <div>On 2/22/2015 6:19
                                                  PM, Rob Withers wrote:<br=
>
                                                </div>
                                                <blockquote type=3D"cite">
                                                  I am stuck, both
                                                  conceptually, as well
                                                  as understanding code
                                                  I wrote a long while
                                                  ago.=C2=A0 I was hoping t=
o
                                                  gain a little insight
                                                  from the list of the
                                                  insides of resolution
                                                  redirection in the
                                                  3-way case.=C2=A0 The
                                                  recent change I have
                                                  made results from my
                                                  thinking I finally
                                                  understand the
                                                  ordering that
                                                  MirandaMethods
                                                  ensure.=C2=A0 I made
                                                  changes such that a
                                                  whenMoreResolved
                                                  directly follows the
                                                  message that generates
                                                  is by adding to the
                                                  front of the msg
                                                  queue.=C2=A0 <br>
                                                  <br>
                                                  In the 3-way case,
                                                  Carol is sending a
                                                  message to Alice,
                                                  passing Bob.=C2=A0 Alice
                                                  receives the message
                                                  and executes, which
                                                  sends a message to
                                                  Bob, then returns the
                                                  result to Carol.=C2=A0 In
                                                  Alice&#39;s vat, the
                                                  DelayedRedirector is
                                                  resolved to the
                                                  RemotePromise of the
                                                  call to Bob, the
                                                  return of Alice&#39;s
                                                  computation and I
                                                  think it sends
                                                  whenMoreResolved to
                                                  the proxy of the new
                                                  promise resolver of
                                                  the send to Bob.=C2=A0 Wh=
at
                                                  little tracing I have
                                                  I am posting below, as
                                                  well as the
                                                  DelayedRedirector
                                                  value() and the
                                                  ProxyResolver
                                                  resolve() code, at the
                                                  bottom.=C2=A0 However, th=
is
                                                  is my question, what
                                                  should the redirector
                                                  do in Alice&#39;s Vat to
                                                  propagate the
                                                  resolution from Bob,
                                                  back to Carol?<br>
                                                  <br>
                                                  Thank you,<br>
                                                  - Robert<br>
                                                  <br>
                                                  <br>
                                                  // There are 3
                                                  messages sent to Bob,
                                                  from Alice:<br>
                                                  // =C2=A0=C2=A0=C2=A0 1)
                                                  getTheAnswer, which
                                                  returns 42, <br>
                                                  // =C2=A0=C2=A0=C2=A0 2) =
<b>hashCode,
                                                    again 42</b> and <br>
                                                  //=C2=A0=C2=A0 =C2=A0 3) =
<b>whenMoreResolved</b>,
                                                  to forward to the
                                                  redirector back in
                                                  Alice.<br>
                                                  <br>
                                                  0 [main] INFO
                                                  cc.ganymede.pauwau.presen=
tation.AbstractPauwauTest=C2=A0
                                                  - 3 Introducers
                                                  starting<br>
                                                  549 [main] INFO
                                                  cc.ganymede.pauwau.presen=
tation.AbstractPauwauTest=C2=A0
                                                  - 3 Introducers on the
                                                  air<br>
                                                  4553 [main] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -1
                                                  resolverId: -1 action:
                                                  lookupSwiss args:
                                                  [497273074681788564315291=
637588644948944089734358])<br>
                                                  4952 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -1
                                                  resolverId: null
                                                  action: lookupSwiss
                                                  args:
                                                  [497273074681788564315291=
637588644948944089734358])<br>
                                                  4958 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - sending message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  1 action: value args:
                                                  [NearRefImpl(hash:
                                                  109537538, receiver:
                                                  TestObject)])<br>
                                                  4998 [third-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - receiving message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  1 action: value args:
                                                  [FarRefImpl(hash:
                                                  68783569)])<br>
                                                  5353 [main] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -1
                                                  resolverId: -1 action:
                                                  lookupSwiss args:
                                                  [-68625483170285595598032=
9529540587585277617841038])<br>
                                                  5593 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -1
                                                  resolverId: null
                                                  action: lookupSwiss
                                                  args:
                                                  [-68625483170285595598032=
9529540587585277617841038])<br>
                                                  5593 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  1 action: value args:
                                                  [NearRefImpl(hash:
                                                  1530099003, receiver:
                                                  TestObject)])<br>
                                                  6201 [main] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  -1 answerId: -2
                                                  resolverId: -2 action:
                                                  redirectForTheAnswer
                                                  args:
                                                  [RemotePromiseRefImpl(has=
h:
                                                  1034568234)])<br>
                                                  6203 [main] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -2
                                                  resolverId: -2 action:
                                                  provideFor args:
                                                  [-56868728519600488495448=
0990488973591228663758441,
                                                  RemotePromiseRefImpl(hash=
:

                                                  1034568234),
-676914875674370369045480105305401075435688776666])<br>
                                                  6239 [main] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  -2 answerId: -3
                                                  resolverId: -3 action:
                                                  hashCode args: [])<br>
                                                  6255 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -2
                                                  resolverId: null
                                                  action: provideFor
                                                  args:
                                                  [-56868728519600488495448=
0990488973591228663758441,
                                                  NearRefImpl(hash:
                                                  1530099003, receiver:
                                                  TestObject),
                                                  -676914875674370369045480=
105305401075435688776666])<br>
                                                  6259 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  2 action: value args:
                                                  [NearRefImpl(hash:
                                                  1323165787, receiver:
cc.ganymede.pauwau.presentation.lib.vat.Vine@4842def1)])<br>
                                                  6403 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -1
                                                  resolverId: -1 action:
                                                  acceptFrom args:
                                                  [HouseAtreides:10003/-687=
934017861573292334955567350102524989066643525,
-676914875674370369045480105305401075435688776666,
cc.ganymede.pauwau.presentation.lib.vat.Vine@6a8400ff])<br>
                                                  6410 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  -1 answerId: -2
                                                  resolverId: null
                                                  action:
                                                  redirectForTheAnswer
                                                  args:
                                                  [RemotePromiseRefImpl(has=
h:
                                                  598908224)])<br>
                                                  6411 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  -2 answerId: -3
                                                  resolverId: null
                                                  action: hashCode args:
                                                  [])<br>
                                                  6411 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  -1 answerId: -2
                                                  resolverId: -2 action:
                                                  getTheAnswer args: [])<br=
>
                                                  6412 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - sending message:
                                                  DeliverMessage(receiverId=
:
                                                  -2 answerId: -3
                                                  resolverId: -3 action:
                                                  hashCode args: [])<br>
                                                  6412 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - sending message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  -2 action:
                                                  whenMoreResolved args:
                                                  [RedirectorProxy:
                                                  FarRefImpl(hash:
                                                  177595052)])<br>
                                                  6766 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  0 answerId: -1
                                                  resolverId: null
                                                  action: acceptFrom
                                                  args:
                                                  [HouseAtreides:10003/-687=
934017861573292334955567350102524989066643525,
                                                  -676914875674370369045480=
105305401075435688776666,




                                                  FarRefImpl(hash:
                                                  690984748)])<br>
                                                  6767 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  -1 answerId: -2
                                                  resolverId: null
                                                  action: getTheAnswer
                                                  args: [])<br>
                                                  6767 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverMessage(receiverId=
:
                                                  -2 answerId: -3
                                                  resolverId: null
                                                  action: hashCode args:
                                                  [])<br>
                                                  6767 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  -2 action:
                                                  whenMoreResolved args:
                                                  [NearRefImpl(hash:
                                                  363771261, receiver:
                                                  RedirectorProxy:
                                                  FarRefImpl(hash:
                                                  196981675))])<br>
                                                  6768 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  2 action: value args:
                                                  [NearRefImpl(hash:
                                                  1530099003, receiver:
                                                  TestObject)])<br>
                                                  6769 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  3 action: value args:
                                                  [NearRefImpl(hash:
                                                  790206055, receiver:
                                                  42)])<br>
                                                  <b>6770 [second-vat]
                                                    DEBUG
                                                    cc.ganymede.pauwau.pres=
entation.PauwauTerminal=C2=A0
                                                    - sending message:
                                                    DeliverOnlyMessage(rece=
iverId:
                                                    4 action: value
                                                    args:
                                                    [NearRefImpl(hash:
                                                    878991039, receiver:
                                                    42)])</b><b><br>
                                                  </b><b>6771
                                                    [second-vat] DEBUG
                                                    cc.ganymede.pauwau.pres=
entation.PauwauTerminal=C2=A0
                                                    - sending message:
                                                    DeliverOnlyMessage(rece=
iverId:
                                                    5 action: value
                                                    args:
                                                    [NearRefImpl(hash:
                                                    790206055, receiver:
                                                    42)])</b><b><br>
                                                  </b>6805 [first-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  2 action: value args:
                                                  [FarRefImpl(hash:
                                                  1332394016)])<br>
                                                  6805 [first-vat] DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0

                                                  - receiving message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  3 action: value args:
                                                  [42])<br>
                                                  <b>6805 [first-vat]
                                                    DEBUG
                                                    cc.ganymede.pauwau.pres=
entation.PauwauTerminal=C2=A0
                                                    - receiving message:
                                                    DeliverOnlyMessage(rece=
iverId:
                                                    4 action: value
                                                    args: [42])</b><b><br>
                                                  </b><b>6805
                                                    [first-vat] DEBUG
                                                    cc.ganymede.pauwau.pres=
entation.PauwauTerminal=C2=A0
                                                    - receiving message:
                                                    DeliverOnlyMessage(rece=
iverId:
                                                    5 action: value
                                                    args: [42])</b><b><br>
                                                  </b>6806 [first-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  3 action: value args:
                                                  [42])<br>
                                                  19932 [first-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  GCAnswerMessage(answerId:
                                                  -1)<br>
                                                  19934 [first-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  GCAnswerMessage(answerId:
                                                  -2)<br>
                                                  19934 [first-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  GCAnswerMessage(answerId:
                                                  -3)<br>
                                                  19984 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  GCAnswerMessage(answerId:
                                                  -1)<br>
                                                  19984 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  GCAnswerMessage(answerId:
                                                  -2)<br>
                                                  19985 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  GCAnswerMessage(answerId:
                                                  -3)<br>
                                                  29679 [third-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  GCAnswerMessage(answerId:
                                                  -1)<br>
                                                  29680 [third-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  1 action: value args:
                                                  [FarRefImpl(hash:
                                                  734824022)])<br>
                                                  29680 [third-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  2 action: value args:
                                                  [FarRefImpl(hash:
                                                  1223086084)])<br>
                                                  29680 [third-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  DeliverOnlyMessage(receiv=
erId:
                                                  3 action: value args:
                                                  [42])<br>
                                                  29681 [third-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  GCAnswerMessage(answerId:
                                                  -1)<br>
                                                  29681 [third-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  GCAnswerMessage(answerId:
                                                  -2)<br>
                                                  29682 [third-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - sending message:
                                                  GCAnswerMessage(answerId:
                                                  -2)<br>
                                                  29722 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  GCAnswerMessage(answerId:
                                                  -1)<br>
                                                  29722 [second-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  GCAnswerMessage(answerId:
                                                  -2)<br>
                                                  29726 [first-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  GCAnswerMessage(answerId:
                                                  -1)<br>
                                                  29726 [first-vat]
                                                  DEBUG
                                                  cc.ganymede.pauwau.presen=
tation.PauwauTerminal=C2=A0
                                                  - receiving message:
                                                  GCAnswerMessage(answerId:
                                                  -2)<br>
                                                  <br>
                                                  <br>
                                                  <br>
                                                  <b>//
                                                    DelayedRedirector
                                                    code:</b><br>
                                                  =C2=A0=C2=A0=C2=A0 public=
 void
                                                  value(Object obj)
                                                  throws
                                                  NotResolvedException {<br=
>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 if(resolver =3D=3D
                                                  null)<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 return;<br>
                                                  <br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0
                                                  if(resolver.isFresh())
                                                  {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  resolver.resolve(obj);<br=
>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 resolver =3D
                                                  null;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 return;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 }<br>
                                                  <br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0
                                                  if(RefUtil.isLocal(obj))
                                                  {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  resolver.resolve(obj);<br=
>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 resolver =3D
                                                  null;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 return;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 }<br>
                                                  <br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 Ref ref =3D
                                                  (Ref)RefUtil.wrap(obj,
resolver.handler.getVat());<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 boolean
                                                  isLocalToResolverScope
                                                  =3D false;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 try {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  isLocalToResolverScope
                                                  =3D
                                                  RefUtil.isLocalToScope(re=
solver.handler.scope,
                                                  ref);<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  if(isLocalToResolverScope=
)
                                                  {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  resolver.resolve(obj);<br=
>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  resolver =3D null;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  return;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 }<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 } catch
                                                  (Exception e) {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  reactToLostClient(e);<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 }<br>
                                                  <br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0
                                                  Pair&lt;PromiseRefImpl,
                                                  Resolver&gt; pair =3D
                                                  RefUtil.promise(ref.getVa=
t());<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 Redirector
                                                  redirector =3D new
                                                  Redirector((ProxyResolver=
)
                                                  pair.second());<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0
                                                  resolver.getProxy().whenR=
esolved(redirector);<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0
                                                  resolver.resolve(pair.fir=
st());<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 resolver =3D
                                                  null;<br>
                                                  =C2=A0=C2=A0=C2=A0 }<br>
                                                  <br>
                                                  <br>
                                                  <b>// ProxyResolver
                                                    code:</b><br>
                                                  =C2=A0=C2=A0=C2=A0 public=
 void
                                                  resolve(final Object
                                                  result) throws
                                                  NotResolvedException {<br=
>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0
                                                  handler.scope.getVat().se=
ndRunnable(new
                                                  Runnable() {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 public
                                                  void run() {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 if(ref
                                                  =3D=3D null)<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  return;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  if(ref.get() =3D=3D null)=
<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  return;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  if(Exception.class.isAssi=
gnableFrom(result.getClass()))
                                                  {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 }<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 Ref
                                                  newRef =3D
                                                  RefUtil.wrap(result,
                                                  handler.scope.getVat());<=
br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 try {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 if
                                                  (newRef =3D=3D null)<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0
                                                  ref.get().getRefImpl().be=
comeContext(null);<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  else<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  =C2=A0=C2=A0=C2=A0
                                                  ref.get().getRefImpl().be=
comeContext(newRef.getRefImpl());<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  if(RefUtil.isResolved(new=
Ref.getRefImpl()))
                                                  {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  =C2=A0=C2=A0=C2=A0 handle=
r =3D null;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  =C2=A0=C2=A0=C2=A0 ref =
=3D null;<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 }<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 }
                                                  catch
                                                  (NotResolvedException
                                                  e) {<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 //
                                                  TODO Auto-generated
                                                  catch block<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                                  e.printStackTrace();<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 }<br>
                                                  =C2=A0=C2=A0=C2=A0 =C2=A0=
=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 }});<br>
                                                  =C2=A0=C2=A0=C2=A0 }<br>
                                                  <br>
                                                </blockquote>
                                                <br>
                                              </div>
                                            </div>
                                          </div>
                                          <br>
_______________________________________________<br>
                                          e-lang mailing list<br>
                                          <a href=3D"mailto:[email protected]=
s-os.org" target=3D"_blank">[email protected]</a><br>
                                          <a href=3D"http://www.eros-os.org=
/mailman/listinfo/e-lang" target=3D"_blank">http://www.eros-os.org/mailman/=
listinfo/e-lang</a><br>
                                          <br>
                                        </blockquote>
                                      </div>
                                      <br>
                                      <br clear=3D"all">
                                      <div><br>
                                      </div>
                                      -- <br>
                                      <div>=C2=A0 =C2=A0 Cheers,<br>
                                        =C2=A0 =C2=A0 --MarkM</div>
                                    </div>
                                    <br>
                                    <fieldset></fieldset>
                                    <br>
                                    <pre>__________________________________=
_____________
e-lang mailing list
<a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]=
os-os.org</a>
<a href=3D"http://www.eros-os.org/mailman/listinfo/e-lang" target=3D"_blank=
">http://www.eros-os.org/mailman/listinfo/e-lang</a>
</pre>
                                  </blockquote>
                                  <br>
                                </div>
                              </div>
                              <br>
_______________________________________________<br>
                              e-lang mailing list<br>
                              <a href=3D"mailto:[email protected]" ta=
rget=3D"_blank">[email protected]</a><br>
                              <a href=3D"http://www.eros-os.org/mailman/lis=
tinfo/e-lang" target=3D"_blank">http://www.eros-os.org/mailman/listinfo/e-l=
ang</a><br>
                              <br>
                            </blockquote>
                          </div>
                          <br>
                          <br clear=3D"all">
                          <div><br>
                          </div>
                          -- <br>
                          <div>=C2=A0 =C2=A0 Cheers,<br>
                            =C2=A0 =C2=A0 --MarkM</div>
                        </div>
                        <br>
                        <fieldset></fieldset>
                        <br>
                        <pre>______________________________________________=
_
e-lang mailing list
<a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]=
os-os.org</a>
<a href=3D"http://www.eros-os.org/mailman/listinfo/e-lang" target=3D"_blank=
">http://www.eros-os.org/mailman/listinfo/e-lang</a>
</pre>
                      </blockquote>
                      <br>
                    </blockquote>
                    <br>
                  </blockquote>
                  <br>
                </div>
              </div>
            </div>
            <br>
            _______________________________________________<br>
            e-lang mailing list<br>
            <a href=3D"mailto:[email protected]" target=3D"_blank">e-=
[email protected]</a><br>
            <a href=3D"http://www.eros-os.org/mailman/listinfo/e-lang" targ=
et=3D"_blank">http://www.eros-os.org/mailman/listinfo/e-lang</a><br>
            <br>
          </blockquote>
        </div>
        <br>
        <br clear=3D"all">
        <div><br>
        </div>
        -- <br>
        <div>=C2=A0 =C2=A0 Cheers,<br>
          =C2=A0 =C2=A0 --MarkM</div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      <pre>_______________________________________________
e-lang mailing list
<a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]=
os-os.org</a>
<a href=3D"http://www.eros-os.org/mailman/listinfo/e-lang" target=3D"_blank=
">http://www.eros-os.org/mailman/listinfo/e-lang</a>
</pre>
    </blockquote>
    <br>
  </div></div></div>

<br>_______________________________________________<br>
e-lang mailing list<br>
<a href=3D"mailto:[email protected]">[email protected]</a><br>
<a href=3D"http://www.eros-os.org/mailman/listinfo/e-lang" rel=3D"noreferre=
r" target=3D"_blank">http://www.eros-os.org/mailman/listinfo/e-lang</a><br>
<br></blockquote></div><br><br clear=3D"all"><div><br></div>-- <br><div cla=
ss=3D"gmail_signature">=C2=A0 =C2=A0 Cheers,<br>=C2=A0 =C2=A0 --MarkM</div>
</div>

--001a1143fc448377270524d5d025--

--===============6790961531683999032==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
e-lang mailing list
[email protected]
http://www.eros-os.org/mailman/listinfo/e-lang

--===============6790961531683999032==--