On Sep 9, 2011, at 11:15 PM, John Toohey wrote:
The joys of ST :-( Pharo really needs some kind of safe mode, that you can boot into, to fix these kinds of problems. Thanks again for you help.
We are working on that. Did you see the fix in startup and all the work to make sure that you can work on headless mode ie not crashing your image because a pop up arise on a headless server... Stef
On Fri, Sep 9, 2011 at 16:59, Igor Stasenko <siguctua@gmail.com> wrote:
On 9 September 2011 22:19, John Toohey <jt@parspro.com> wrote:
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?
none. rebuild an image.
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
-- Best regards, Igor Stasenko.
-- ~JT