Hi Sven, There seems to be a new problem with Zinc when building Seaside. Not sure what it is: + build.sh -i seaside3 -s seaside3-zinc -o seaside3-zinc build.sh: Execution aborted (/usr/local/bin/cog) THERE_BE_DRAGONS_HERE PrimitiveFailed: primitive #signal in a Semaphore() failed 4 September 2011 5:53:45 pm VM: unix - i686 - linux-gnu - Croquet Closure Cog VM [CoInterpreter VMMaker-oscog.35] Image: Pharo1.3 [Latest update: #13298] Semaphore(Object)>>primitiveFailed: Receiver: a Semaphore() Arguments and temporary variables: selector: #signal Receiver's instance variables: firstLink: nil lastLink: nil excessSignals: 1073741823 Semaphore(Object)>>primitiveFailed Receiver: a Semaphore() Arguments and temporary variables: Receiver's instance variables: firstLink: nil lastLink: nil excessSignals: 1073741823 Semaphore>>signal Receiver: a Semaphore() Arguments and temporary variables: Receiver's instance variables: firstLink: nil lastLink: nil excessSignals: 1073741823 [FinishedDelay := self. TimingSemaphore signal] in DelayWaitTimeout(Delay)>>unschedule Receiver: a DelayWaitTimeout(282210 msecs) Arguments and temporary variables: Receiver's instance variables: delayDuration: 282210 resumptionTime: nil delaySemaphore: a Semaphore() beingWaitedOn: false process: a Process in nil expired: true [caught := true. self wait. blockValue := mutuallyExcludedBlock value] in Semaphore>>critical: Receiver: a Semaphore() Arguments and temporary variables: <<error during printing> Receiver's instance variables: firstLink: nil lastLink: nil excessSignals: 0 BlockClosure>>ensure: Receiver: [caught := true. self wait. blockValue := mutuallyExcludedBlock value] Arguments and temporary variables: aBlock: [caught ifTrue: [self signal]] complete: nil returnValue: nil Receiver's instance variables: outerContext: Semaphore>>critical: startpc: 42 numArgs: 0 Semaphore>>critical: Receiver: a Semaphore() Arguments and temporary variables: <<error during printing> Receiver's instance variables: firstLink: nil lastLink: nil excessSignals: 0 DelayWaitTimeout(Delay)>>unschedule Receiver: a DelayWaitTimeout(282210 msecs) Arguments and temporary variables: Receiver's instance variables: delayDuration: 282210 resumptionTime: nil delaySemaphore: a Semaphore() beingWaitedOn: false process: a Process in nil expired: true [self unschedule] in DelayWaitTimeout>>wait Receiver: a DelayWaitTimeout(282210 msecs) Arguments and temporary variables: Receiver's instance variables: delayDuration: 282210 resumptionTime: nil delaySemaphore: a Semaphore() beingWaitedOn: false process: a Process in nil expired: true BlockClosure>>ensure: Receiver: [self schedule. beingWaitedOn ifTrue: [delaySemaphore wait] ifFalse: [expired := true...etc... Arguments and temporary variables: aBlock: [self unschedule] complete: true returnValue: true Receiver's instance variables: outerContext: DelayWaitTimeout>>wait startpc: 41 numArgs: 0 DelayWaitTimeout>>wait Receiver: a DelayWaitTimeout(282210 msecs) Arguments and temporary variables: Receiver's instance variables: delayDuration: 282210 resumptionTime: nil delaySemaphore: a Semaphore() beingWaitedOn: false process: a Process in nil expired: true Semaphore>>waitTimeoutMSecs: Receiver: a Semaphore() Arguments and temporary variables: anInteger: 282210 d: a DelayWaitTimeout(282210 msecs) Receiver's instance variables: firstLink: nil lastLink: nil excessSignals: 0 Socket>>waitForConnectionFor:ifTimedOut: Receiver: a Socket[waitingForConnection] Arguments and temporary variables: timeout: 300 timeoutBlock: [^ nil] startTime: 3617674 msecsDelta: 300000 msecsEllapsed: 17790 status: 1 Receiver's instance variables: semaphore: a Semaphore() socketHandle: #[230 40 102 78 0 0 0 0 64 77 219 8] readSemaphore: a Semaphore() writeSemaphore: a Semaphore() Socket>>waitForAcceptFor: Receiver: a Socket[waitingForConnection] Arguments and temporary variables: timeout: 300 Receiver's instance variables: semaphore: a Semaphore() socketHandle: #[230 40 102 78 0 0 0 0 64 77 219 8] readSemaphore: a Semaphore() writeSemaphore: a Semaphore() ZnMultiThreadedServer>>serveConnectionsOn: Receiver: a ZnMultiThreadedServer(stopped 8080) Arguments and temporary variables: listeningSocket: a Socket[waitingForConnection] stream: nil socket: nil Receiver's instance variables: port: 8080 process: nil serverSocket: a Socket[waitingForConnection] delegate: a ZnSeasideServerAdaptorDelegate authenticator: nil log: a ZnLogSupport lastRequest: nil lastResponse: nil lock: a Mutex connections: an OrderedCollection() [[serverSocket isValid ifFalse: [^ self listenLoop]. self serveConnectionsOn: serverSocket] repeat. nil] in ZnMultiThreadedServer>>listenLoop Receiver: a ZnMultiThreadedServer(stopped 8080) Arguments and temporary variables: Receiver's instance variables: port: 8080 process: nil serverSocket: a Socket[waitingForConnection] delegate: a ZnSeasideServerAdaptorDelegate authenticator: nil log: a ZnLogSupport lastRequest: nil lastResponse: nil lock: a Mutex connections: an OrderedCollection() BlockClosure>>ifCurtailed: Receiver: [[serverSocket isValid ifFalse: [^ self listenLoop]. self serveConnectionsOn: serverSoc...etc... Arguments and temporary variables: aBlock: [self releaseServerSocket] complete: nil result: nil Receiver's instance variables: outerContext: ZnMultiThreadedServer>>listenLoop startpc: 52 numArgs: 0 ZnMultiThreadedServer>>listenLoop Receiver: a ZnMultiThreadedServer(stopped 8080) Arguments and temporary variables: Receiver's instance variables: port: 8080 process: nil serverSocket: a Socket[waitingForConnection] delegate: a ZnSeasideServerAdaptorDelegate authenticator: nil log: a ZnLogSupport lastRequest: nil lastResponse: nil lock: a Mutex connections: an OrderedCollection() [[self listenLoop] repeat. nil] in ZnMultiThreadedServer(ZnSingleThreadedServer)>>start Receiver: a ZnMultiThreadedServer(stopped 8080) Arguments and temporary variables: Receiver's instance variables: port: 8080 process: nil serverSocket: a Socket[waitingForConnection] delegate: a ZnSeasideServerAdaptorDelegate authenticator: nil log: a ZnLogSupport lastRequest: nil lastResponse: nil lock: a Mutex connections: an OrderedCollection() [self value. Processor terminateActive] in BlockClosure>>newProcess Receiver: [[self listenLoop] repeat. nil] Arguments and temporary variables: Receiver's instance variables: outerContext: ZnMultiThreadedServer(ZnSingleThreadedServer)>>start startpc: 77 numArgs: 0 --- The full stack --- Semaphore(Object)>>primitiveFailed: Semaphore(Object)>>primitiveFailed Semaphore>>signal [FinishedDelay := self. TimingSemaphore signal] in DelayWaitTimeout(Delay)>>unschedule [caught := true. self wait. blockValue := mutuallyExcludedBlock value] in Semaphore>>critical: BlockClosure>>ensure: Semaphore>>critical: DelayWaitTimeout(Delay)>>unschedule [self unschedule] in DelayWaitTimeout>>wait BlockClosure>>ensure: DelayWaitTimeout>>wait Semaphore>>waitTimeoutMSecs: Socket>>waitForConnectionFor:ifTimedOut: Socket>>waitForAcceptFor: ZnMultiThreadedServer>>serveConnectionsOn: [[serverSocket isValid ifFalse: [^ self listenLoop]. self serveConnectionsOn: serverSocket] repeat. nil] in ZnMultiThreadedServer>>listenLoop BlockClosure>>ifCurtailed: ZnMultiThreadedServer>>listenLoop [[self listenLoop] repeat. nil] in ZnMultiThreadedServer(ZnSingleThreadedServer)>>start [self value. Processor terminateActive] in BlockClosure>>newProcess ------------------------------------------------------------ Processes and their stacks: Process: a Process in Process>>resume stack: Process>>resume BlockClosure>>forkAt:named: ZnMultiThreadedServer(ZnSingleThreadedServer)>>start ZnZincServerAdaptor>>basicStart [aServerAdaptor basicStart] in WAServerManager>>start: BlockClosure>>ifCurtailed: WAServerManager>>start: ZnZincServerAdaptor(WAServerAdaptor)>>start UndefinedObject>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: Compiler class>>evaluate:for:notifying:logged: Compiler class>>evaluate:for:logged: Compiler class>>evaluate:logged: [| chunk | val := (self peekFor: $!) ifTrue: [(Compiler evaluate: self nextChunk logged: false) scanFrom: self] ifFalse: [chunk := self nextChunk. self checkForPreamble: chunk. Compiler evaluate: chunk logged: true]] in [:bar | [self atEnd] whileFalse: [bar value: self position. self skipSeparators. [| chunk | val := (self peekFor: $!) ifTrue: [(Compiler evaluate: self nextChunk logged: false) scanFrom: self] ifFalse: [chunk := self nextChunk. self checkForPreamble: chunk. Compiler evaluate: chunk logged: true]] on: InMidstOfFileinNotification do: [:ex | ex resume: true]. self skipStyleChunk]. self close] in RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing: BlockClosure>>on:do: [:bar | [self atEnd] whileFalse: [bar value: self position. self skipSeparators. [| chunk | val := (self peekFor: $!) ifTrue: [(Compiler evaluate: self nextChunk logged: false) scanFrom: self] ifFalse: [chunk := self nextChunk. self checkForPreamble: chunk. Compiler evaluate: chunk logged: true]] on: InMidstOfFileinNotification do: [:ex | ex resume: true]. self skipStyleChunk]. self close] in RWBinaryOrTextStream(PositionableStream)>>fileInAnnouncing: NonInteractiveUIManager>>progressInitiationExceptionDefaultAction: ProgressInitiationException>>defaultAction UndefinedObject>>handleSignal: ProgressInitiationException(Exception)>>signal ------------------------------ Process: a Process in Delay class>>handleTimerEvent stack: Delay class>>handleTimerEvent Delay class>>runTimerEventLoop [self runTimerEventLoop] in Delay class>>startTimerEventLoop [self value. Processor terminateActive] in BlockClosure>>newProcess ------------------------------ Process: a Process in SmalltalkImage>>lowSpaceWatcher stack: SmalltalkImage>>lowSpaceWatcher [self lowSpaceWatcher] in SmalltalkImage>>installLowSpaceWatcher [self value. Processor terminateActive] in BlockClosure>>newProcess ------------------------------ Process: a Process in ProcessorScheduler class>>idleProcess stack: ProcessorScheduler class>>idleProcess [self idleProcess] in ProcessorScheduler class>>startUp [self value. Processor terminateActive] in BlockClosure>>newProcess ------------------------------ Process: a Process in [delaySemaphore wait] in Delay>>wait stack: [delaySemaphore wait] in Delay>>wait BlockClosure>>ifCurtailed: Delay>>wait InputEventPollingFetcher>>waitForInput InputEventPollingFetcher(InputEventFetcher)>>eventLoop [self eventLoop] in InputEventPollingFetcher(InputEventFetcher)>>installEventLoop [self value. Processor terminateActive] in BlockClosure>>newProcess ------------------------------ Process: a Process in WeakArray class>>finalizationProcess stack: WeakArray class>>finalizationProcess [self finalizationProcess] in WeakArray class>>restartFinalizationProcess [self value. Processor terminateActive] in BlockClosure>>newProcess ------------------------------ Process: a Process in [delaySemaphore wait] in Delay>>wait stack: [delaySemaphore wait] in Delay>>wait BlockClosure>>ifCurtailed: Delay>>wait GRPharoPlatform>>cometWait CTPusher class>>pingProcess [[self pingProcess] repeat. nil] in CTPusher class>>startUp [self value. Processor terminateActive] in BlockClosure>>newProcess ------------------------------ Process: a Process in nil stack: Array(SequenceableCollection)>>do: [:logger | logger nextPutAll: 'Processes and their stacks: '; cr. Process allInstances do: [:each | | ctx | logger nextPutAll: 'Process: '; print: each; cr; nextPutAll: ' stack:'; cr; cr. ctx := each isActiveProcess ifTrue: [thisContext sender] ifFalse: [each suspendedContext]. ctx ifNotNil: [(ctx stackOfSize: 20) do: [:s | logger print: s; cr]]. logger nextPutAll: '------------------------------'; cr; cr]] in [Smalltalk logError: aString inContext: aContext. Smalltalk logDuring: [:logger | logger nextPutAll: 'Processes and their stacks: '; cr. Process allInstances do: [:each | | ctx | logger nextPutAll: 'Process: '; print: each; cr; nextPutAll: ' stack:'; cr; cr. ctx := each isActiveProcess ifTrue: [thisContext sender] ifFalse: [each suspendedContext]. ctx ifNotNil: [(ctx stackOfSize: 20) do: [:s | logger print: s; cr]]. logger nextPutAll: '------------------------------'; cr; cr]]] in NonInteractiveUIManager>>quitFrom:withMessage: [logStream := self openLog. aMonadicBlock value: logStream] in SmalltalkImage>>logDuring: BlockClosure>>ensure: SmalltalkImage>>logDuring: [Smalltalk logError: aString inContext: aContext. Smalltalk logDuring: [:logger | logger nextPutAll: 'Processes and their stacks: '; cr. Process allInstances do: [:each | | ctx | logger nextPutAll: 'Process: '; print: each; cr; nextPutAll: ' stack:'; cr; cr. ctx := each isActiveProcess ifTrue: [thisContext sender] ifFalse: [each suspendedContext]. ctx ifNotNil: [(ctx stackOfSize: 20) do: [:s | logger print: s; cr]]. logger nextPutAll: '------------------------------'; cr; cr]]] in NonInteractiveUIManager>>quitFrom:withMessage: BlockClosure>>ensure: NonInteractiveUIManager>>quitFrom:withMessage: NonInteractiveUIManager>>unhandledErrorDefaultAction: UnhandledError>>defaultAction UndefinedObject>>handleSignal: UnhandledError(Exception)>>signal UnhandledError class>>signalForException: PrimitiveFailed(Error)>>defaultAction UndefinedObject>>handleSignal: PrimitiveFailed(Exception)>>signal PrimitiveFailed class(SelectorException class)>>signalFor: Semaphore(Object)>>primitiveFailed: Semaphore(Object)>>primitiveFailed Semaphore>>signal ------------------------------ /srv/jenkins/builder/build.sh: line 170: 4882 Killed exec "$PHARO_VM" $PHARO_PARAM "$OUTPUT_IMAGE" "$OUTPUT_SCRIPT" Build step 'Execute shell' marked build as failure [CHECKSTYLE] Skipping publisher since build result is FAILURE Archiving artifacts Recording test results Finished: FAILURE On 4 September 2011 16:33, Lukas Renggli <renggli@gmail.com> wrote:
Yeah, the idea of the weak data structure was to have a fallback to the current situation in case something went wrong when explicitely managing the connections. The current implementation now uses a normal ordered collection. It passes all tests.
Sounds great!
Note that this version of Zn is way further than what is in 1.3, it also contains a brand new client I am working on and some important code already uses this new client. This needs some more testing before it can be included I guess (although it works for me). I know the Seaside builds use the latest Zn.
Yes, I update Zn for the Seaside build to the latest version.
Lukas
-- Lukas Renggli www.lukas-renggli.ch
-- Lukas Renggli www.lukas-renggli.ch