[Vm-dev] BUG? A problem with callbacks that shows up in 64bits (but is on 32bits too)

Esteban Lorenzano estebanlm at gmail.com
Sun Mar 12 11:53:37 UTC 2017


Hi, 

this is lockSurfaceFn: 

createLockSurfaceFn
	^ FFICallback 
		signature: #(void * (void *handle, int *pitch, int x, int y, int w, int h))
		block: [ :handle :pitch :x :y :w :h |
			pitch signedLongAt: 1 put: (self get_stride: handle).
			self get_data: handle ]

and

createUnlockSurfaceFn
	^ FFICallback 
		signature: #(int (void *handle, int x, int y, int w, int h))
		block: [ :handle :x :y :w :h | 0 "Do nothing” ]

cheers!
Esteban

> On 12 Mar 2017, at 03:34, Eliot Miranda <eliot.miranda at gmail.com> wrote:
> 
> Hi Esteban,
> 
> On Fri, Mar 10, 2017 at 7:35 AM, Esteban Lorenzano <estebanlm at gmail.com <mailto:estebanlm at gmail.com>> wrote:
> 
> Hi,
> 
> I’m tumbling into an error in Pharo, because we use callbacks intensively, in Athens(cairo)-to-World conversion in particular, and people is sending always their crash reports… we made the whole conversion a lot more robust since problems started to arise, but now I hit a wall I cannot solve: I think problem is in something in callbacks.
> 
> My original theory is wrong.  As you suspected it is something to do with the callback in primitiveCopyBits via lockSurfaces & unlockSurfaces.  Can you tell me what the callback is and what code installs it into the lockSurfaceFn and unlockSurfaceFn?
> 
> 
> And problem is showing very easy on 64bits (while in 32bits it takes time and is more random).
> 
> Here is the easiest way to reproduce it (in mac):
> 
> wget files.pharo.org/get-files/60/pharo64-mac-latest.zip <http://files.pharo.org/get-files/60/pharo64-mac-latest.zip>
> wget files.pharo.org/get-files/60/pharo64.zip <http://files.pharo.org/get-files/60/pharo64.zip>
> wget files.pharo.org/get-files/60/sources.zip <http://files.pharo.org/get-files/60/sources.zip>
> unzip pharo64-mac-latest.zip
> unzip pharo64.zip
> unzip sources.zip
> ./Pharo.app/Contents/MacOS/Pharo ./Pharo64-60438.image eval "VGTigerDemo runDemo"
> 
> eventually (like 5-6 seconds after, if not immediately), you will have a stack like this:
> 
> SmallInteger(Object)>>primitiveFailed:
> SmallInteger(Object)>>primitiveFailed
> SmallInteger(VMCallbackContext64)>>primSignal:andReturnAs:fromContext:
> GrafPort>>copyBits
> GrafPort>>image:at:sourceRect:rule:
> FormCanvas>>image:at:sourceRect:rule:
> FormCanvas(Canvas)>>drawImage:at:sourceRect:
> FormCanvas(Canvas)>>drawImage:at:
> VGTigerDemo>>runDemo
> VGTigerDemo class>>runDemo
> UndefinedObject>>DoIt
> OpalCompiler>>evaluate
> OpalCompiler(AbstractCompiler)>>evaluate:
> [ result := Smalltalk compiler evaluate: aStream.
> self hasSessionChanged
>         ifFalse: [ self stdout
>                         print: result;
>                         lf ] ] in EvaluateCommandLineHandler>>evaluate: in Block: [ result := Smalltalk compiler evaluate: aStream....
> BlockClosure>>on:do:
> EvaluateCommandLineHandler>>evaluate:
> EvaluateCommandLineHandler>>evaluateArguments
> EvaluateCommandLineHandler>>activate
> EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
> [ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: in Block: [ aCommandLinehandler activateWith: commandLine ]
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
> PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
> [ self
>         handleArgument:
>                 (self arguments
>                         ifEmpty: [ '' ]
>                         ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate in Block: [ self...
> BlockClosure>>on:do:
> PharoCommandLineHandler(BasicCommandLineHandler)>>activate
> PharoCommandLineHandler>>activate
> PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
> [ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith: in Block: [ super activateWith: aCommandLine ]
> 
> Any idea?
> 
> thanks!
> Esteban
> 
> 
> 
> -- 
> _,,,^..^,,,_
> best, Eliot

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170312/4d4e1125/attachment-0001.html>


More information about the Vm-dev mailing list