<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><br><div>Begin forwarded message:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>From: </b></span><span style="font-family:'Helvetica'; font-size:medium;">"<a href="mailto:roberto.minelli@usi.ch">roberto.minelli@usi.ch</a>" <<a href="mailto:roberto.minelli@usi.ch">roberto.minelli@usi.ch</a>><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>Subject: </b></span><span style="font-family:'Helvetica'; font-size:medium;"><b>Re: [Pharo-fuel] [Pharo-dev] Corrupt BlockClosure</b><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>Date: </b></span><span style="font-family:'Helvetica'; font-size:medium;">24. Mai 2013 08:10:19 MESZ<br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>To: </b></span><span style="font-family:'Helvetica'; font-size:medium;">The Fuel Project <<a href="mailto:pharo-fuel@lists.gforge.inria.fr">pharo-fuel@lists.gforge.inria.fr</a>><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1.0);"><b>Reply-To: </b></span><span style="font-family:'Helvetica'; font-size:medium;">The Fuel Project <<a href="mailto:pharo-fuel@lists.gforge.inria.fr">pharo-fuel@lists.gforge.inria.fr</a>><br></span></div><br><div>Hi,<br><br>Thanks all of you for interest ;)<br><br>On May 24, 2013, at 7:15 AM, Max Leske <<a href="mailto:maxleske@gmail.com">maxleske@gmail.com</a>><br> wrote:<br><br><blockquote type="cite">I played around with reverting the method and serializing but that doesn't change anything (the existing BlockClosure is obviously not modified).<br>Then I thought that maybe the method was changed during a running DFSession but still couldn't reproduce.<br></blockquote><br>Me neither!!<br><br><blockquote type="cite"><br>@Roberto<br>Can you tell us anything about what you did befor / during / after running your session?<br></blockquote><br>Nope. Unfortunately I've a couple of "broken sessions" I cannot serialize because of that bug.. But all of them refers sooner or later to the DFSession>>#numberOfMethodCalls method. Dunno why.<br><br><blockquote type="cite">@Roberto<br>Is it possible to reproduce the stack with a new session? Or did this only happen once?<br></blockquote><br>I have no clue how to reproduce, but it did not happen only once. As I said, there are 3/4 sessions I couldn't export due to this SubscriptOutOfBounds.<br><br>Cheers,<br>Roby<br><br><br><blockquote type="cite"><br><br>On 24.05.2013, at 06:44, Max Leske <<a href="mailto:maxleske@gmail.com">maxleske@gmail.com</a>> wrote:<br><br><blockquote type="cite"><br>On 23.05.2013, at 22:58, Camille Teruel <<a href="mailto:camille.teruel@gmail.com">camille.teruel@gmail.com</a>> wrote:<br><br><blockquote type="cite">Hi,<br><br>This is indeed strange, the BlockClosure has an incorrect startpc (31 instead of 43). You can fix it with: <br>theBlock instVar: 2 put: 43. <br>The wrong startpc corresponds to the beginning of the block in the previous version of the method (DFSession>>#numberOfMethodCalls), but I don't know why.<br></blockquote><br>Would it help to recompile the method?<br><br><blockquote type="cite">I don't know fuel enough but could it be because the method of the block changed between serialization and materialization?<br></blockquote><br>No, there was never a materialization of that session.<br><br><blockquote type="cite"><br>Camille <br><br>On 23 mai 2013, at 21:02, Max Leske wrote:<br><br><blockquote type="cite">Hi Marcus<br><br>Roberto sent this mail to the Fuel-dev list. When we looked at the problem we noticed that serialization fails because of a corrupt BlockClosure. Since that's not really our territorry Mariano suggested to forward this to you.<br><br>The image with the corrupt BlockClosure is available here: <a href="https://dl.dropboxusercontent.com/u/6281855/DFlow-SubscriptOutOfBounds.zip">https://dl.dropboxusercontent.com/u/6281855/DFlow-SubscriptOutOfBounds.zip</a>.<br>To see the stack, right click on the only entry in the right window and click "export session". You'll find the corrupt BlockClosure at BlockClosure>>fuelAccept:<br><br>@Roberto<br>Is it possible to reproduce the stack with a new session? Or did this only happen once?<br><br><br>Cheers,<br>Max<br><br><br>Begin forwarded message:<br><br><blockquote type="cite">From: Mariano Martinez Peck <<a href="mailto:marianopeck@gmail.com">marianopeck@gmail.com</a>><br>Subject: Re: [Pharo-fuel] [Fuel] SubscriptOutOfBounds: 27<br>Date: 23. Mai 2013 14:23:45 MESZ<br>To: The Fuel Project <<a href="mailto:pharo-fuel@lists.gforge.inria.fr">pharo-fuel@lists.gforge.inria.fr</a>><br>Reply-To: The Fuel Project <<a href="mailto:pharo-fuel@lists.gforge.inria.fr">pharo-fuel@lists.gforge.inria.fr</a>><br><br>Indeed, it would be nice if you can known which CompiledMethod and blockclosure are having the problem. Not only the source code but the real bytecodes.<br>Also, can you isolate and just try to serialize them alone and reproduce the problem? In other words, a reproducible test case? :)<br>Thanks!<br><br><br>On Thu, May 23, 2013 at 8:41 AM, Max Leske <<a href="mailto:maxleske@gmail.com">maxleske@gmail.com</a>> wrote:<br>What's the compiled method? Is it a special one? Which selector in which class?<br><br>Max<br><br>On 23.05.2013, at 12:45, "<a href="mailto:roberto.minelli@usi.ch">roberto.minelli@usi.ch</a>" <<a href="mailto:roberto.minelli@usi.ch">roberto.minelli@usi.ch</a>> wrote:<br><br><blockquote type="cite">Hi,<br><br>While using Fuel in a 2.0 image to serialize some objects (including CompiledMethods) I'm getting this error: SubscriptOutOfBounds: 27.<br><br>I spent hours in the debugger before writing this email, but I'm not able to figure out why this is happening. I attach the full stack of the error (STACK#1).<br><br>I understood that it has something to do with a particular CompiledMethod in my image and/or a BlockClosure which for some reason cannot be printed (i.e., the printString returns <error in printString: evaluate "self printString" to debug>) and when I try to printString to debug I got the STACK#2 which in turn does not bring me to any possible solution.<br><br>Hope some of you will have an intuition on that or at least tell me where to look or how to script a possible workaround.<br><br>Thanks in advance,<br>Roby<br><br>############################################################################################<br>######################################### STACK#1 ###########################################<br>###########################################################################################<br>CompiledMethod(Object)>>errorSubscriptBounds:<br>CompiledMethod(Object)>>at:<br>InstructionStream>>interpretNextInstructionFor:<br>CompiledMethod>>abstractBytecodeMessageAt: in Block: [(InstructionStream new method: self pc: pc)...<br>BlockClosure>>on:do:<br>CompiledMethod>>abstractBytecodeMessageAt:<br>BlockClosure>>blockCreationBytecodeMessage<br>BlockClosure>>endPC<br>BlockClosure>>abstractBytecodeMessagesDo:<br>BlockClosure>>isClean<br>BlockClosure>>shouldBeSubstitutedByCleanCopy<br>BlockClosure>>fuelAccept:<br>FLFullGeneralMapper(FLLightGeneralMapper)>>mapAndTrace:<br>FLFullGlobalMapper>>mapAndTrace: in Block: [(anObject class == CompiledMethod...<br>FLLargeIdentityDictionary>>at:ifAbsent:<br>FLFullGlobalMapper>>mapAndTrace:<br>FLPluggableSubstitutionMapper>>mapAndTrace:<br>FLPluggableSubstitutionMapper>>mapAndTrace:<br>FLAnalysis>>mapAndTrace:<br>FLAnalysis>>run<br>FLAnalyzer>>setDefaultAnalysis in Block: [:anObject | (FLAnalysis...<br>FLAnalyzer>>analysisFor:<br>FLSerialization>>analysisStep<br>FLSerialization>>run<br>DFSerializer(FLSerializer)>>setDefaultSerialization in Block: [:anObject :anEncoder | (FLSerialization...<br>DFSerializer(FLSerializer)>>serialize:on: in Block: [:anEncoder | ...<br>FLEncoder class>>on:globalEnvironment:do: in Block: [aBlock value: anEncoder]<br>BlockClosure>>ensure:<br>FLEncoder class>>on:globalEnvironment:do:<br>DFSerializer(FLSerializer)>>serialize:on:<br><br><br>############################################################################################<br>######################################### STACK#2 ###########################################<br>############################################################################################<br>Decompiler(Object)>>error:<br>Decompiler>>decompileBlock:<br>BlockClosure>>decompile<br>BlockClosure>>printOn:<br>BlockClosure(Object)>>printStringLimitedTo: in Block: [:s | self printOn: s]<br>String class(SequenceableCollection class)>>streamContents:limitedTo:<br>BlockClosure(Object)>>printStringLimitedTo:<br>BlockClosure(Object)>>printString<br>BlockClosure>>DoIt<br>Compiler>>evaluate:in:to:notifying:ifFail:logged:<br>SmalltalkEditor>>evaluateSelectionAndDo: in Block: [rcvr class evaluatorClass new...<br>BlockClosure>>on:do:<br>SmalltalkEditor>>evaluateSelectionAndDo:<br>SmalltalkEditor>>evaluateSelection<br>PluggableTextMorph>>doIt in Block: [textMorph editor evaluateSelection]<br>PluggableTextMorph>>handleEdit: in Block: [result := editBlock value]<br>TextMorphForEditView(TextMorph)>>handleEdit:<br>PluggableTextMorph>>handleEdit:<br>PluggableTextMorph>>doIt<br>SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [:morph | morph doIt]<br>BlockClosure>>cull:<br>BlockClosure>>cull:cull:<br>BlockClosure>>cull:cull:cull:<br>KMCategoryTarget>>completeMatch:buffer:<br>KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [:l | l completeMatch: self buffer: aBuffer]<br>Array(SequenceableCollection)>>do:<br>KMKeymap>>notifyCompleteMatchTo:buffer:<br>KMKeymap>>onMatchWith:notify:andDo:<br>KMCategory>>onMatchWith:notify:andDo: in Block: [:entry | entry...<br>Set>>do:<br><br><br><br>_______________________________________________<br>Pharo-fuel mailing list<br><a href="mailto:Pharo-fuel@lists.gforge.inria.fr">Pharo-fuel@lists.gforge.inria.fr</a><br>http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel<br></blockquote><br>_______________________________________________<br>Pharo-fuel mailing list<br><a href="mailto:Pharo-fuel@lists.gforge.inria.fr">Pharo-fuel@lists.gforge.inria.fr</a><br>http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel<br><br><br><br>-- <br>Mariano<br>http://marianopeck.wordpress.com<br>_______________________________________________<br>Pharo-fuel mailing list<br>Pharo-fuel@lists.gforge.inria.fr<br>http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel<br></blockquote><br></blockquote><br></blockquote><br></blockquote><br>_______________________________________________<br>Pharo-fuel mailing list<br><a href="mailto:Pharo-fuel@lists.gforge.inria.fr">Pharo-fuel@lists.gforge.inria.fr</a><br>http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel<br></blockquote><br><br>_______________________________________________<br>Pharo-fuel mailing list<br><a href="mailto:Pharo-fuel@lists.gforge.inria.fr">Pharo-fuel@lists.gforge.inria.fr</a><br>http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel<br></div></blockquote></div><br></body></html>