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]> Sat, 7 Mar 2015 16:07:10 -0800
Newsgroups gmane.comp.lang.e.general
Message-ID <CABHxS9ix4ULB7-Fg5L320LuoAhjnLTjmWmtVHJd1Y5G_9vu3DQ@mail.gmail.com>
--===============4426471970658302953==
Content-Type: multipart/alternative; boundary=001a1141c930f1af430510bbb297

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

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

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

<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 las=
t night, as close as I can remember:</div><div><br></div><div>&quot;Have yo=
u 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 reloa=
d enough context to think about it. Could you have a look?&quot; We then we=
nt 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 d=
id not get back to the subject of your question.</div><div><br></div><div>T=
rue story. I am posting this without first checking with the houseguest, wh=
ich is why I&#39;m omitting their name.</div><div><br></div><div>I should h=
ave said something to explain my lack of response. The rudeness really is m=
ine.</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;border-left:1=
px #ccc solid;padding-left:1ex">
 =20
   =20
 =20
  <div bgcolor=3D"#FFFFFF" text=3D"#000000">
    Thanks for all the reticent help over the years, everyone.=C2=A0 It&#39=
;s
    been fun.=C2=A0 Such a pity that that help seems permanently revoked,
    like an untrusted capability.=C2=A0 I must not have participated well i=
n
    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 r=
ight
    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 class=3D"h5">
    <br>
    <div>On 3/4/2015 9:27 AM, Rob Withers wrote:<br>
    </div>
    <blockquote type=3D"cite">
     =20
      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 far3Des=
c
      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">
       =20
        I see.=C2=A0 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?=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">&lt;<a href=3D"mailto:robert=
[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">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.w.withers@gmai=
l.com" 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 EL=
ib
                    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 requir=
e
                    some digging to unearth what I am missing, but the
                    direction is clear.=C2=A0 The place it blows up is in m=
y
                    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 la=
ck
                    of an IdentityManager.<br>
                    <br>
                    I republished my code to: <a href=3D"https://github.com=
/tooantuh/pauwau" target=3D"_blank">https://github.com/tooantuh/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://erig=
hts.org/elib/distrib/captp/index.html" target=3D"_blank">http://erights.org=
/elib/distrib/captp/index.html</a>
                        <div>and in the source code of=C2=A0<a href=3D"http=
s://code.google.com/p/caja-captp/" target=3D"_blank">https://code.google.co=
m/p/caja-captp/</a></div>
                        <div><br>
                        </div>
                        <div>I don&#39;t quite understand your 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 hre=
f=3D"mailto:[email protected]" target=3D"_blank">robert.w.withers@=
gmail.com</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">
                            <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 to 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 What 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, this 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, a=
gain 42</b>
                                    and <br>
                                    //=C2=A0=C2=A0 =C2=A0 3) <b>whenMoreRes=
olved</b>,
                                    to forward to the redirector back in
                                    Alice.<br>
                                    <br>
                                    0 [main] INFO
                                    cc.ganymede.pauwau.presentation.Abstrac=
tPauwauTest=C2=A0
                                    - 3 Introducers starting<br>
                                    549 [main] INFO
                                    cc.ganymede.pauwau.presentation.Abstrac=
tPauwauTest=C2=A0
                                    - 3 Introducers on the air<br>
                                    4553 [main] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -1 resolverId: -1 action:
                                    lookupSwiss args:
                                    [49727307468178856431529163758864494894=
4089734358])<br>
                                    4952 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -1 resolverId: null
                                    action: lookupSwiss args:
                                    [49727307468178856431529163758864494894=
4089734358])<br>
                                    4958 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverOnlyMessage(receiverId: 1
                                    action: value args:
                                    [NearRefImpl(hash: 109537538,
                                    receiver: TestObject)])<br>
                                    4998 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverOnlyMessage(receiverId: 1
                                    action: value args:
                                    [FarRefImpl(hash: 68783569)])<br>
                                    5353 [main] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -1 resolverId: -1 action:
                                    lookupSwiss args:
                                    [-6862548317028559559803295295405875852=
77617841038])<br>
                                    5593 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -1 resolverId: null
                                    action: lookupSwiss args:
                                    [-6862548317028559559803295295405875852=
77617841038])<br>
                                    5593 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverOnlyMessage(receiverId: 1
                                    action: value args:
                                    [NearRefImpl(hash: 1530099003,
                                    receiver: TestObject)])<br>
                                    6201 [main] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: -1
                                    answerId: -2 resolverId: -2 action:
                                    redirectForTheAnswer args:
                                    [RemotePromiseRefImpl(hash:
                                    1034568234)])<br>
                                    6203 [main] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -2 resolverId: -2 action:
                                    provideFor args:
                                    [-5686872851960048849544809904889735912=
28663758441,
                                    RemotePromiseRefImpl(hash:
                                    1034568234),
-676914875674370369045480105305401075435688776666])<br>
                                    6239 [main] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: -2
                                    answerId: -3 resolverId: -3 action:
                                    hashCode args: [])<br>
                                    6255 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -2 resolverId: null
                                    action: provideFor args:
                                    [-5686872851960048849544809904889735912=
28663758441,
                                    NearRefImpl(hash: 1530099003,
                                    receiver: TestObject),
                                    -67691487567437036904548010530540107543=
5688776666])<br>
                                    6259 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverOnlyMessage(receiverId: 2
                                    action: value args:
                                    [NearRefImpl(hash: 1323165787,
                                    receiver:
                                    cc.ganymede.pauwau.presentation.lib.vat=
.Vine@4842def1)])<br>
                                    6403 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -1 resolverId: -1 action:
                                    acceptFrom args:
                                    [HouseAtreides:10003/-68793401786157329=
2334955567350102524989066643525,
-676914875674370369045480105305401075435688776666,
cc.ganymede.pauwau.presentation.lib.vat.Vine@6a8400ff])<br>
                                    6410 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: -1
                                    answerId: -2 resolverId: null
                                    action: redirectForTheAnswer args:
                                    [RemotePromiseRefImpl(hash:
                                    598908224)])<br>
                                    6411 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: -2
                                    answerId: -3 resolverId: null
                                    action: hashCode args: [])<br>
                                    6411 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: -1
                                    answerId: -2 resolverId: -2 action:
                                    getTheAnswer args: [])<br>
                                    6412 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverMessage(receiverId: -2
                                    answerId: -3 resolverId: -3 action:
                                    hashCode args: [])<br>
                                    6412 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverOnlyMessage(receiverId: -2
                                    action: whenMoreResolved args:
                                    [RedirectorProxy: FarRefImpl(hash:
                                    177595052)])<br>
                                    6766 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: 0
                                    answerId: -1 resolverId: null
                                    action: acceptFrom args:
                                    [HouseAtreides:10003/-68793401786157329=
2334955567350102524989066643525,
                                    -67691487567437036904548010530540107543=
5688776666,



                                    FarRefImpl(hash: 690984748)])<br>
                                    6767 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: -1
                                    answerId: -2 resolverId: null
                                    action: getTheAnswer args: [])<br>
                                    6767 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverMessage(receiverId: -2
                                    answerId: -3 resolverId: null
                                    action: hashCode args: [])<br>
                                    6767 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverOnlyMessage(receiverId: -2
                                    action: whenMoreResolved args:
                                    [NearRefImpl(hash: 363771261,
                                    receiver: RedirectorProxy:
                                    FarRefImpl(hash: 196981675))])<br>
                                    6768 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverOnlyMessage(receiverId: 2
                                    action: value args:
                                    [NearRefImpl(hash: 1530099003,
                                    receiver: TestObject)])<br>
                                    6769 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverOnlyMessage(receiverId: 3
                                    action: value args:
                                    [NearRefImpl(hash: 790206055,
                                    receiver: 42)])<br>
                                    <b>6770 [second-vat] DEBUG
                                      cc.ganymede.pauwau.presentation.Pauwa=
uTerminal=C2=A0
                                      - sending message:
                                      DeliverOnlyMessage(receiverId: 4
                                      action: value args:
                                      [NearRefImpl(hash: 878991039,
                                      receiver: 42)])</b><b><br>
                                    </b><b>6771 [second-vat] DEBUG
                                      cc.ganymede.pauwau.presentation.Pauwa=
uTerminal=C2=A0
                                      - sending message:
                                      DeliverOnlyMessage(receiverId: 5
                                      action: value args:
                                      [NearRefImpl(hash: 790206055,
                                      receiver: 42)])</b><b><br>
                                    </b>6805 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverOnlyMessage(receiverId: 2
                                    action: value args:
                                    [FarRefImpl(hash: 1332394016)])<br>
                                    6805 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverOnlyMessage(receiverId: 3
                                    action: value args: [42])<br>
                                    <b>6805 [first-vat] DEBUG
                                      cc.ganymede.pauwau.presentation.Pauwa=
uTerminal=C2=A0
                                      - receiving message:
                                      DeliverOnlyMessage(receiverId: 4
                                      action: value args: [42])</b><b><br>
                                    </b><b>6805 [first-vat] DEBUG
                                      cc.ganymede.pauwau.presentation.Pauwa=
uTerminal=C2=A0
                                      - receiving message:
                                      DeliverOnlyMessage(receiverId: 5
                                      action: value args: [42])</b><b><br>
                                    </b>6806 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    DeliverOnlyMessage(receiverId: 3
                                    action: value args: [42])<br>
                                    19932 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    GCAnswerMessage(answerId: -1)<br>
                                    19934 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    GCAnswerMessage(answerId: -2)<br>
                                    19934 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    GCAnswerMessage(answerId: -3)<br>
                                    19984 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    GCAnswerMessage(answerId: -1)<br>
                                    19984 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    GCAnswerMessage(answerId: -2)<br>
                                    19985 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    GCAnswerMessage(answerId: -3)<br>
                                    29679 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    GCAnswerMessage(answerId: -1)<br>
                                    29680 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverOnlyMessage(receiverId: 1
                                    action: value args:
                                    [FarRefImpl(hash: 734824022)])<br>
                                    29680 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverOnlyMessage(receiverId: 2
                                    action: value args:
                                    [FarRefImpl(hash: 1223086084)])<br>
                                    29680 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    DeliverOnlyMessage(receiverId: 3
                                    action: value args: [42])<br>
                                    29681 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    GCAnswerMessage(answerId: -1)<br>
                                    29681 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    GCAnswerMessage(answerId: -2)<br>
                                    29682 [third-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - sending message:
                                    GCAnswerMessage(answerId: -2)<br>
                                    29722 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    GCAnswerMessage(answerId: -1)<br>
                                    29722 [second-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    GCAnswerMessage(answerId: -2)<br>
                                    29726 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=C2=A0
                                    - receiving message:
                                    GCAnswerMessage(answerId: -1)<br>
                                    29726 [first-vat] DEBUG
                                    cc.ganymede.pauwau.presentation.PauwauT=
erminal=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(Ob=
ject obj)
                                    throws NotResolvedException {<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 i=
f(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 i=
f(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 i=
f(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 R=
ef ref =3D
                                    (Ref)RefUtil.wrap(obj,
                                    resolver.handler.getVat());<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 b=
oolean
                                    isLocalToResolverScope =3D false;<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 t=
ry {<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =
=C2=A0=C2=A0=C2=A0 isLocalToResolverScope =3D
                                    RefUtil.isLocalToScope(resolver.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 P=
air&lt;PromiseRefImpl,
                                    Resolver&gt; pair =3D
                                    RefUtil.promise(ref.getVat());<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 R=
edirector redirector =3D new
                                    Redirector((ProxyResolver)
                                    pair.second());<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                    resolver.getProxy().whenResolved(redire=
ctor);<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0
                                    resolver.resolve(pair.first());<br>
                                    =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 r=
esolver =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().sendRunnable(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.isAssignableFrom(res=
ult.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().becomeContext(nu=
ll);<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().becomeContext(ne=
wRef.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(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 =C2=A0=C2=A0=C2=A0=
 handler =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]" targ=
et=3D"_blank">[email protected]</a><br>
                            <a href=3D"http://www.eros-os.org/mailman/listi=
nfo/e-lang" target=3D"_blank">http://www.eros-os.org/mailman/listinfo/e-lan=
g</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]" 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>
      </blockquote>
      <br>
    </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" 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>

--001a1141c930f1af430510bbb297--

--===============4426471970658302953==
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

--===============4426471970658302953==--