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

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Sun Mar 12 13:27:41 UTC 2017


2017-03-12 13:43 GMT+01:00 Nicolai Hess <nicolaihess at gmail.com>:

>
>
>
> 2017-03-12 13:36 GMT+01:00 Nicolas Cellier <nicolas.cellier.aka.nice@
> gmail.com>:
>
>>
>> Couldn't it be that some Smalltalk memory has been relocated? (I'm
>> thinking of the DisplayScreen bits)
>>
>
> http://forum.world.st/Too-frequent-crashes-tp4927143p4927722.html
>
>
>
>
>>
>> 2017-03-12 12:53 GMT+01:00 Esteban Lorenzano <estebanlm at gmail.com>:
>>
>>>
>>> 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>
>>>  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
>>>> wget files.pharo.org/get-files/60/pharo64.zip
>>>> wget 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/3c358875/attachment.html>


More information about the Vm-dev mailing list