This code is used to keep a socket connection open to an ActiveMQ JMS server. I use the Stomp protocol to send messages from ST to various servers in my cluster via JMS. The self error: e code was just meant to fire up the debugger, so I could trace any errors. I'll remove that now. So do I have to rebuild a new image from scratch now? Is there any command line switch that I can use to by pass the loading of my app on start up? On Fri, Sep 9, 2011 at 15:10, Igor Stasenko <siguctua@gmail.com> wrote:
On 9 September 2011 21:58, John Toohey <jt@parspro.com> wrote:
This is my code :- startAnnouncing     process notNil ifTrue: [ ^ self ].     process := [         [ [ [ self announceNextCommand ]             on: ConnectionTimedOut             do: [ :e | ] ] repeat ]                 on: Error                 do: [ :e | self logger error: 'Error in startAnnouncing e --> ', e greaseString.                         self error: e.                         e return
this code looking suspicious. but i not sure what it does, do you override #error: method in your class? what it does? if it not overridden, then by sending self error: you causing another error to be signaled, which is not handled by any handler block so, it will signal an unhandled error exception and finally bail out to OS during startup. To simplify things, what happens is following:
[ self error: 'hahaha' ] fork. instead it should be like:
[ [ self error: 'hahaha' ] on: Error do: [:ex | .. handle error here, and don't let it being unhandled ] ] fork.
                ].         ] forkAt: Processor highIOPriority named: 'Juliet Stomp Announcer'
How can I make this safer, or make it in such a way that the image doesn't crash?
Also is the image destroyed now? Is there a way to start it and bypass this code? Thanks for looking into this.
On Fri, Sep 9, 2011 at 14:55, Igor Stasenko <siguctua@gmail.com> wrote:
On 9 September 2011 20:43, John Toohey <jt@parspro.com> wrote:
This happened after a VM crash, when I try to restart I get this in the log. Isn't the error caused by the isEmptyOrNil primitive? Is there anyway for me to access the image now?
an error caused by a primitive failure with invalid socket:
SocketStream>>receiveData
    Receiver: SocketStream[inbuf:4kb/outbuf:4kb]     Arguments and temporary variables:
    Receiver's instance variables:         recentlyRead:  716         socket:     a Socket[invalidSocketHandle]         inBuffer:    'CONNECTED session:ID:John-Tooheys-MacBook-Pro.local-56368-1315585750...etc...         outBuffer:    'SUBSCRIBE destination: /topic/parspro-core.juliet-core-events
looks like your image was saved with socket being open and upon restart it tries to read data from it. This , of course , causing failure and leads to error signaled.
If you want to track down the error, there is an option in system settings: 'Make a snapshot of new version before quit On unhandled exception, save a new version of image before quit' in 'Headless mode' group.
On Fri, Sep 9, 2011 at 14:38, Igor Stasenko <siguctua@gmail.com> wrote:
On 9 September 2011 20:31, John Toohey <jt@parspro.com> wrote:
I am experiencing a lot of random crashes with this VM on OSX 10.6. It just crashed again, and this time I cannot get it to restart. It seems to be crashing in a socket receive class. The stack trace is here :-
This is not a crash, it just quits to OS due to error at startup. To avoid imminent leave to OS, put an error handler around your startup code (i guess it is in CoreMQStompConnection somewhere?).
THERE_BE_DRAGONS_HERE MessageNotUnderstood: PrimitiveFailed>>isEmptyOrNil 9 September 2011 2:28:41 pm
VM: Mac OS - intel - 1067 - Croquet Closure Cog VM [CoInterpreter VMMaker-oscog-IgorStasenko.123] 21.0 Image: Pharo1.3 [Latest update: #13298]
PrimitiveFailed(Object)>>doesNotUnderstand: #isEmptyOrNil     Receiver: PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[invalidSocketHandl...etc...     Arguments and temporary variables:         t1:   isEmptyOrNil         t2:   MessageNotUnderstood: PrimitiveFailed>>isEmptyOrNil         t3:   nil     Receiver's instance variables:         messageText:   'primitive #primSocketReceiveDataAvailable: in a Socket[invalidSoc...etc...         tag:   nil         signaler:    a Socket[invalidSocketHandle]         signalContext:  PrimitiveFailed(Exception)>>signal         handlerContext:     BlockClosure>>on:do:         outerContext:  nil         selector:    #primSocketReceiveDataAvailable:
[:t1 | | t2 | t1 << self class name.     (t2 := self messageText) isEmptyOrNil         ifFalse: [t1 << ': ' << t2]] in Error(Exception)>>description     Receiver: <<error during printing>>     Arguments and temporary variables:         t1:   a WriteStream 'Error'         t2:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...     Receiver's instance variables:         messageText:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a S...etc...         tag:   nil         signaler:    a CoreMQStompConnection connectResponse: CONNECTED session: ID:John-T...etc...         signalContext:  Error(Exception)>>signal         handlerContext:     nil         outerContext:  nil
String class(SequenceableCollection class)>>new:streamContents:     Receiver: String     Arguments and temporary variables:         t1:   100         t2:   [:t1 | | t2 | t1 << self class name.     (t2 := self messageText) isEmptyOrNi...etc...         t3:   a WriteStream 'Error'     Receiver's instance variables:         superclass:   ArrayedCollection         methodDict:   a MethodDictionary(size 303)         format:     2         instanceVariables:    nil         organization:  ('*Compiler-Kernel' inviolateInstanceVariableNames isLegalInstVar...etc...         subclasses:   {ByteString. WideString. Symbol}         name:  #String         classPool:    a Dictionary(#AsciiOrder->#[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...etc...         sharedPools:   nil         environment:   a SystemDictionary(lots of globals)         category:    #'Collections-Strings'         traitComposition:    {}         localSelectors:     nil
String class(SequenceableCollection class)>>streamContents:     Receiver: String     Arguments and temporary variables:         t1:   [:t1 | | t2 | t1 << self class name.     (t2 := self messageText) isEmptyOrNi...etc...     Receiver's instance variables:         superclass:   ArrayedCollection         methodDict:   a MethodDictionary(size 303)         format:     2         instanceVariables:    nil         organization:  ('*Compiler-Kernel' inviolateInstanceVariableNames isLegalInstVar...etc...         subclasses:   {ByteString. WideString. Symbol}         name:  #String         classPool:    a Dictionary(#AsciiOrder->#[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...etc...         sharedPools:   nil         environment:   a SystemDictionary(lots of globals)         category:    #'Collections-Strings'         traitComposition:    {}         localSelectors:     nil
Error(Exception)>>description     Receiver: <<error during printing>>     Arguments and temporary variables:
    Receiver's instance variables:         messageText:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a S...etc...         tag:   nil         signaler:    a CoreMQStompConnection connectResponse: CONNECTED session: ID:John-T...etc...         signalContext:  Error(Exception)>>signal         handlerContext:     nil         outerContext:  nil
StartupUIManager(NonInteractiveUIManager)>>unhandledErrorDefaultAction:     Receiver: a StartupUIManager     Arguments and temporary variables: <<error during printing>     Receiver's instance variables:         uiManager:    a MorphicUIManager         doNotQuitOnRestart:   false
UnhandledError>>defaultAction     Receiver: UnhandledError     Arguments and temporary variables:
    Receiver's instance variables:         messageText:   nil         tag:   nil         signaler:    <<error during printing>>
UndefinedObject>>handleSignal:     Receiver: nil     Arguments and temporary variables:         t1:   UnhandledError     Receiver's instance variables: nil
MethodContext(ContextPart)>>handleSignal:     Receiver: BlockClosure>>on:do:     Arguments and temporary variables:         t1:   UnhandledError         t2:   nil     Receiver's instance variables:         sender:     [[[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil...etc...         pc:   17         stackp:     3         method:     (BlockClosure>>#on:do: "a CompiledMethod(137625600)")         closureOrNil:  nil         receiver:    [[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | ni...etc...
MethodContext(ContextPart)>>handleSignal:     Receiver: BlockClosure>>on:do:     Arguments and temporary variables:         t1:   UnhandledError         t2:   nil     Receiver's instance variables:         sender:     [[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil]...etc...         pc:   17         stackp:     3         method:     (BlockClosure>>#on:do: "a CompiledMethod(137625600)")         closureOrNil:  nil         receiver:    [self announceNextCommand]
UnhandledError(Exception)>>signal     Receiver: UnhandledError     Arguments and temporary variables:
    Receiver's instance variables:         messageText:   nil         tag:   nil         signaler:    <<error during printing>>
UnhandledError class>>signalForException:     Receiver: UnhandledError     Arguments and temporary variables: <<error during printing>     Receiver's instance variables:         superclass:   Exception         methodDict:   a MethodDictionary(#defaultAction->(UnhandledError>>#defaultAction ...etc...         format:     144         instanceVariables:    #('exception')         organization:  ('*UIManager' defaultAction) ('as yet unclassified' exception exc...etc...         subclasses:   nil         name:  #UnhandledError         classPool:    nil         sharedPools:   nil         environment:   a SystemDictionary(lots of globals)         category:    #'Kernel-Exceptions'         traitComposition:    nil         localSelectors:     nil
Error>>defaultAction     Receiver: <<error during printing>>     Arguments and temporary variables:
    Receiver's instance variables:         messageText:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a S...etc...         tag:   nil         signaler:    a CoreMQStompConnection connectResponse: CONNECTED session: ID:John-T...etc...         signalContext:  Error(Exception)>>signal         handlerContext:     nil         outerContext:  nil
UndefinedObject>>handleSignal:     Receiver: nil     Arguments and temporary variables: <<error during printing>     Receiver's instance variables: nil
MethodContext(ContextPart)>>handleSignal:     Receiver: BlockClosure>>on:do:     Arguments and temporary variables: <<error during printing>     Receiver's instance variables:         sender:     [[[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil...etc...         pc:   17         stackp:     3         method:     (BlockClosure>>#on:do: "a CompiledMethod(137625600)")         closureOrNil:  nil         receiver:    [[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | ni...etc...
MethodContext(ContextPart)>>handleSignal:     Receiver: BlockClosure>>on:do:     Arguments and temporary variables: <<error during printing>     Receiver's instance variables:         sender:     [[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil]...etc...         pc:   17         stackp:     3         method:     (BlockClosure>>#on:do: "a CompiledMethod(137625600)")         closureOrNil:  nil         receiver:    [self announceNextCommand]
Error(Exception)>>signal     Receiver: <<error during printing>>     Arguments and temporary variables:
    Receiver's instance variables:         messageText:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a S...etc...         tag:   nil         signaler:    a CoreMQStompConnection connectResponse: CONNECTED session: ID:John-T...etc...         signalContext:  Error(Exception)>>signal         handlerContext:     nil         outerContext:  nil
Error(Exception)>>signal:     Receiver: <<error during printing>>     Arguments and temporary variables:         t1:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...     Receiver's instance variables:         messageText:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a S...etc...         tag:   nil         signaler:    a CoreMQStompConnection connectResponse: CONNECTED session: ID:John-T...etc...         signalContext:  Error(Exception)>>signal         handlerContext:     nil         outerContext:  nil
CoreMQStompConnection(Object)>>error:     Receiver: a CoreMQStompConnection connectResponse: CONNECTED session: ID:John-Tooheys-MacBook-Pro.lo...etc...     Arguments and temporary variables:         t1:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...     Receiver's instance variables:         stream:     SocketStream[inbuf:4kb/outbuf:4kb]         connectResponse:     CONNECTED session: ID:John-Tooheys-MacBook-Pro.local-56368-131...etc...         subscriptions:  an OrderedCollection('/topic/parspro-core.juliet-core-events')         commandDestination:   '/topic/parspro-core.juliet-core-events'         process:     a Process in nil         logger:     a JulietLogger
[:t1 | self logger error: 'Error in startAnnouncing e --> ' , t1 greaseString.     self error: t1.     t1 return] in [[[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil]] repeat.     nil]         on: Error         do: [:t1 |             self logger error: 'Error in startAnnouncing e --> ' , t1 greaseString.             self error: t1.             t1 return]] in CoreMQStompConnection>>startAnnouncing     Receiver: a CoreMQStompConnection connectResponse: CONNECTED session: ID:John-Tooheys-MacBook-Pro.lo...etc...     Arguments and temporary variables:         t1:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...     Receiver's instance variables:         stream:     SocketStream[inbuf:4kb/outbuf:4kb]         connectResponse:     CONNECTED session: ID:John-Tooheys-MacBook-Pro.local-56368-131...etc...         subscriptions:  an OrderedCollection('/topic/parspro-core.juliet-core-events')         commandDestination:   '/topic/parspro-core.juliet-core-events'         process:     a Process in nil         logger:     a JulietLogger
BlockClosure>>cull:     Receiver: [:t1 | self logger error: 'Error in startAnnouncing e --> ' , t1 greaseString.     self erro...etc...     Arguments and temporary variables:         t1:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...     Receiver's instance variables:         outerContext:  [[[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1...etc...         startpc:     118         numArgs:     1
[(self tempAt: 2)         cull: t1] in MethodContext(ContextPart)>>handleSignal:     Receiver: BlockClosure>>on:do:     Arguments and temporary variables:         t1:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...     Receiver's instance variables:         sender:     [[[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil...etc...         pc:   17         stackp:     3         method:     (BlockClosure>>#on:do: "a CompiledMethod(137625600)")         closureOrNil:  nil         receiver:    [[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | ni...etc...
BlockClosure>>ensure:     Receiver: [(self tempAt: 2)         cull: t1]     Arguments and temporary variables:         aBlock:     [self tempAt: 3 put: true]         complete:    nil         returnValue:   nil     Receiver's instance variables:         outerContext:  MethodContext(ContextPart)>>handleSignal:         startpc:     98         numArgs:     0
MethodContext(ContextPart)>>handleSignal:     Receiver: BlockClosure>>on:do:     Arguments and temporary variables:         t1:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...         t2:   nil     Receiver's instance variables:         sender:     [[[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil...etc...         pc:   17         stackp:     3         method:     (BlockClosure>>#on:do: "a CompiledMethod(137625600)")         closureOrNil:  nil         receiver:    [[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | ni...etc...
MethodContext(ContextPart)>>handleSignal:     Receiver: BlockClosure>>on:do:     Arguments and temporary variables:         t1:   PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[inv...etc...         t2:   nil     Receiver's instance variables:         sender:     [[[self announceNextCommand]         on: ConnectionTimedOut         do: [:t1 | nil]...etc...         pc:   17         stackp:     3         method:     (BlockClosure>>#on:do: "a CompiledMethod(137625600)")         closureOrNil:  nil         receiver:    [self announceNextCommand]
PrimitiveFailed(Exception)>>signal     Receiver: PrimitiveFailed: primitive #primSocketReceiveDataAvailable: in a Socket[invalidSocketHandl...etc...     Arguments and temporary variables:
    Receiver's instance variables:         messageText:   'primitive #primSocketReceiveDataAvailable: in a Socket[invalidSoc...etc...         tag:   nil         signaler:    a Socket[invalidSocketHandle]         signalContext:  PrimitiveFailed(Exception)>>signal         handlerContext:     BlockClosure>>on:do:         outerContext:  nil         selector:    #primSocketReceiveDataAvailable:
PrimitiveFailed class(SelectorException class)>>signalFor:     Receiver: PrimitiveFailed     Arguments and temporary variables:         t1:   #primSocketReceiveDataAvailable:     Receiver's instance variables:         superclass:   SelectorException         methodDict:   a MethodDictionary(#standardMessageText->(PrimitiveFailed>>#standar...etc...         format:     144         instanceVariables:    nil         organization:  ('printing' standardMessageText)
        subclasses:   nil         name:  #PrimitiveFailed         classPool:    nil         sharedPools:   nil         environment:   a SystemDictionary(lots of globals)         category:    #'Kernel-Exceptions'         traitComposition:    {}         localSelectors:     nil
Socket(Object)>>primitiveFailed: Â Â Â Â Receiver: a Socket[invalidSocketHandle] Â Â Â Â Arguments and temporary variables: Â Â Â Â Â Â Â Â t1: Â Â #primSocketReceiveDataAvailable: Â Â Â Â Receiver's instance variables: Â Â Â Â Â Â Â Â semaphore: Â Â Â a Semaphore() Â Â Â Â Â Â Â Â socketHandle: Â #[162 57 106 78 0 0 0 0 128 42 86 0] Â Â Â Â Â Â Â Â readSemaphore: Â a Semaphore() Â Â Â Â Â Â Â Â writeSemaphore: Â Â Â Â a Semaphore()
Socket(Object)>>primitiveFailed     Receiver: a Socket[invalidSocketHandle]     Arguments and temporary variables:
    Receiver's instance variables:         semaphore:    a Semaphore()         socketHandle:  #[162 57 106 78 0 0 0 0 128 42 86 0]         readSemaphore:  a Semaphore()         writeSemaphore:     a Semaphore()
Socket>>primSocketReceiveDataAvailable: Â Â Â Â Receiver: a Socket[invalidSocketHandle] Â Â Â Â Arguments and temporary variables: Â Â Â Â Â Â Â Â t1: Â Â #[162 57 106 78 0 0 0 0 128 42 86 0] Â Â Â Â Receiver's instance variables: Â Â Â Â Â Â Â Â semaphore: Â Â Â a Semaphore() Â Â Â Â Â Â Â Â socketHandle: Â #[162 57 106 78 0 0 0 0 128 42 86 0] Â Â Â Â Â Â Â Â readSemaphore: Â a Semaphore() Â Â Â Â Â Â Â Â writeSemaphore: Â Â Â Â a Semaphore()
Socket>>waitForDataFor:ifClosed:ifTimedOut: Â Â Â Â Receiver: a Socket[invalidSocketHandle] Â Â Â Â Arguments and temporary variables: Â Â Â Â Â Â Â Â t1: Â Â 45 Â Â Â Â Â Â Â Â t2: Â Â [ConnectionClosed signal: 'Connection closed while waiting for data.'] Â Â Â Â Â Â Â Â t3: Â Â [ConnectionTimedOut signal: 'Data receive timed out.'] Â Â Â Â Â Â Â Â t4: Â Â 2210099 Â Â Â Â Â Â Â Â t5: Â Â 45000 Â Â Â Â Receiver's instance variables: Â Â Â Â Â Â Â Â semaphore: Â Â Â a Semaphore() Â Â Â Â Â Â Â Â socketHandle: Â #[162 57 106 78 0 0 0 0 128 42 86 0] Â Â Â Â Â Â Â Â readSemaphore: Â a Semaphore() Â Â Â Â Â Â Â Â writeSemaphore: Â Â Â Â a Semaphore()
Socket>>waitForDataFor: Â Â Â Â Receiver: a Socket[invalidSocketHandle] Â Â Â Â Arguments and temporary variables: Â Â Â Â Â Â Â Â t1: Â Â 45 Â Â Â Â Receiver's instance variables: Â Â Â Â Â Â Â Â semaphore: Â Â Â a Semaphore() Â Â Â Â Â Â Â Â socketHandle: Â #[162 57 106 78 0 0 0 0 128 42 86 0] Â Â Â Â Â Â Â Â readSemaphore: Â a Semaphore() Â Â Â Â Â Â Â Â writeSemaphore: Â Â Â Â a Semaphore()
Socket>>receiveDataSignallingTimeout:into:startingAt: Â Â Â Â Receiver: a Socket[invalidSocketHandle] Â Â Â Â Arguments and temporary variables: Â Â Â Â Â Â Â Â t1: Â Â 45 Â Â Â Â Â Â Â Â t2: Â Â 'CONNECTED session:ID:John-Tooheys-MacBook-Pro.local-56368-1315585750288-4:...etc... Â Â Â Â Â Â Â Â t3: Â Â 796 Â Â Â Â Receiver's instance variables: Â Â Â Â Â Â Â Â semaphore: Â Â Â a Semaphore() Â Â Â Â Â Â Â Â socketHandle: Â #[162 57 106 78 0 0 0 0 128 42 86 0] Â Â Â Â Â Â Â Â readSemaphore: Â a Semaphore() Â Â Â Â Â Â Â Â writeSemaphore: Â Â Â Â a Semaphore()
SocketStream>>receiveData     Receiver: SocketStream[inbuf:4kb/outbuf:4kb]     Arguments and temporary variables:
    Receiver's instance variables:         recentlyRead:  716         socket:     a Socket[invalidSocketHandle]         inBuffer:    'CONNECTED session:ID:John-Tooheys-MacBook-Pro.local-56368-1315585750...etc...         outBuffer:    'SUBSCRIBE destination: /topic/parspro-core.juliet-core-events
On Thu, Sep 8, 2011 at 10:05, Marcus Denker <marcus.denker@inria.fr> wrote:
On Sep 8, 2011, at 3:59 PM, John Toohey wrote:
Hi, Is there a 1.3 OneClick build available with the Cog VM, or should I just down load the linux and OSX Cog builds from the Jenkins server?
The script on the hudson is old... we need to update it. And move everything from hudson to jenkins. And, and...
So for now:
    https://gforge.inria.fr/frs/download.php/28922/Pharo-1.3-OneClick.zip
hand-build one-click with Cog as build from https://ci.lille.inria.fr/pharo/view/Cog/
often run into problems with having different VMs/Plugin on different servers, and like the idea of having both Liux and OSX supported in one package, where I can just update the image.
-- Marcus Denker -- http://marcusdenker.de
-- ~JT
-- Best regards, Igor Stasenko AKA sig.
-- ~JT
-- Best regards, Igor Stasenko AKA sig.
-- ~JT
-- Best regards, Igor Stasenko.
-- ~JT