Hi Esteban, On Mon, Mar 4, 2019 at 4:31 AM Esteban Lorenzano <[email protected]> wrote:
> Hi, > > Mmm… FFIMethodRegistry is reseting the method value to its old value > because you modified the method but you did not executed it (you simulated > it, I guess), and FFICalloutAPI updates the registry on method execution. > Then on image shutdown the methods are reseted to their original value. > This is usually not an issue, but running with the simulator can cause > that problem. > It happens with or without the simulator. If I redefine the method and save, expecting that on startup the new version will be executed, and startup with the normal VM, the method is reset. Surely this is a bug and the method should be removed from the FFI registry when it is redefined with no FFI usage in it. Right? > > Esteban > > On 3 Mar 2019, at 23:03, Eliot Miranda <[email protected]> wrote: > > Hi All, > > I'm trying to debug remaining limitations in Image Segment support in > Spur using a case provided by Max Leske. This is a pair of Pharo 6 images, > one of which saves an image segment the other which loads it. Both use > OSEnvironment>>getEnv: to access environment variables. > > The base definition of OSEnvironment>>getEnv: is > > !OSEnvironment methodsFor: 'accessing' stamp: 'auto 5/3/2016 10:31'! > getEnv: arg1 > "This method calls the Standard C Library getenv() function. The > name of the argument (arg1) should fit decompiled version." > ^ self ffiCall: #( String getenv (String arg1) ) module: LibC! ! > > but as I'm using the VM Simulator to debug the image segment issues I need > to avoid the FFI, which isn't yet simulateable. So I redefine > OSEnvironment>>getEnv: as follows, and then save and exit. > > !OSEnvironment methodsFor: 'accessing' stamp: 'EliotMiranda 02/27/2019 > 17:09'! > getEnv: aByteStringOrByteArray > "This method calls the Standard C Library getenv() function. The > name of the argument (arg1) should fit decompiled version." > <primitive: 'primitiveGetenv' module: '' error: ec> > ec == #'bad argument' ifTrue: > [aByteStringOrByteArray isString ifFalse: > [^self getEnv: aByteStringOrByteArray asString]]. > self primitiveFail! ! > > But, and here's the weird bit, when I start up the image, the new > definition has been discarded and replaced by the original. WTF?!?! Why > is this happening? How can I disable this? > > The only way that I've found I am able to save with a new version is by > doing a Save As... to a new name. This is fine, but I find the current > behavior extremely unhelpful. Is it a bug? If it is intended, whats the > rationale? > _,,,^..^,,,_ > best, Eliot > > > -- _,,,^..^,,,_ best, Eliot
