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>"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't yet been able to reloa= d enough context to think about it. Could you have a look?" 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'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"><<a href=3D"mailto:robert.w.withers@gmail= .com" target=3D"_blank">[email protected]</a>></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'= ;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'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'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"><<a href=3D"mailto:robert= [email protected]" target=3D"_blank">[email protected]</a>><= /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 <<a href=3D"mailto:robert.w.withers@gmai= l.com" target=3D"_blank">[email protected]</a>> 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'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 "Vine" 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't quite understand your question, so I'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"><<a hre= f=3D"mailto:[email protected]" target=3D"_blank">robert.w.withers@= gmail.com</a>></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'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'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.=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'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<PromiseRefImpl, Resolver> 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==--