Hi When NativeBoost tries to call munmap to free a page (happens because a pointer I freed was the last reserved one in that page) it will throw a NBFFICalloutError (every time) because (I think) it can't find the symbol. I have absolutely no clue how to fix this so I'm in need of help.
System: OS X 10.8.2 Image: 1.4 NativeBoost-Core: CamilloBruni.80 (Installed by using the latest NBInstaller) Cheers, Max Here's the stack: 15 November 2012 5:04:23.895 pm VM: Mac OS - intel - 1082 - NBCoInterpreter NativeBoost-CogPlugin-IgorStasenko.14 uuid: da3a649c-e2b2-bd4c-aa2f-9c2ebdb2658a Oct 26 2012, StackToRegisterMappingCogit VMMaker-oscog-EstebanLorenzano.164 uuid: d77dee73-00f5-4d00-847b-00646b08329d Oct 26 2012, git://gitorious.org/cogvm/blessed.git Commit: 48af8595004fd0ec3a3ac6d44c3d7516a87981ca Date: 2012-10-24 16:56:20 +0200 By: Igor Stasenko <[email protected]> Jenkins build #131 Image: Pharo1.4 [Latest update: #14457] NBFFICallout class>>signalError: Receiver: NBFFICallout Arguments and temporary variables: errorCode: 1 Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil NBFFICallout class(NBNativeCodeGen class)>>handleFailureIn:nativeCode: Receiver: NBFFICallout Arguments and temporary variables: aContext: NativeBoostMac32(NativeBoost)>>bootstrapLoadSymbol:ofLength:fromModul...etc... aBlock: [:gen | gen useEmitCall; sender: sender; parseOptions: anOptions; cdecl...etc... method: (NativeBoost>>#bootstrapLoadSymbol:ofLength:fromModule:into: "a Compile...etc... lastError: 1 Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil NBFFICallout class>>cdecl:emitCall:options: Receiver: NBFFICallout Arguments and temporary variables: functionSpec: #(#NBBootstrapUlong #(#byte #* #symbolName #, #long #symbolLen #,...etc... aCallEmittingBlock: [:gen | gen proxy callFn: #ioLoadSymbol:OfLength:FromModule...etc... anOptions: #(#- #optDirectProxyFnAddress #optAllowExternalAddressPtr) sender: NativeBoostMac32(NativeBoost)>>bootstrapLoadSymbol:ofLength:fromModule:...etc... Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil NativeBoostMac32(NativeBoost)>>bootstrapLoadSymbol:ofLength:fromModule:into: Receiver: a NativeBoostMac32 Arguments and temporary variables: symbolName: 'munmap' symbolLen: 6 moduleHandle: -2 returnValueBuffer: #[0 0 0 0 0 0 0 0] Receiver's instance variables: bootstrapping: false insideCallback: nil callbackCounterAddr: @ 16r5F74000 extraRootsRegistry: a NBExtraRootsRegistry rootsCell: @ 16r5F7402A gateFunction: @ 16r5F74004 heap: a NBMacExternalHeapManager NativeBoostMac32(NativeBoost)>>loadSymbol:fromModule: Receiver: a NativeBoostMac32 Arguments and temporary variables: aSymbolName: 'munmap' moduleName: -2 bytes: #[0 0 0 0 0 0 0 0] module: -2 handle: nil Receiver's instance variables: bootstrapping: false insideCallback: nil callbackCounterAddr: @ 16r5F74000 extraRootsRegistry: a NBExtraRootsRegistry rootsCell: @ 16r5F7402A gateFunction: @ 16r5F74004 heap: a NBMacExternalHeapManager NativeBoostMac32(NativeBoostLinux32)>>loadSymbol:fromModule: Receiver: a NativeBoostMac32 Arguments and temporary variables: aSymbolName: 'munmap' moduleName: -2 Receiver's instance variables: bootstrapping: false insideCallback: nil callbackCounterAddr: @ 16r5F74000 extraRootsRegistry: a NBExtraRootsRegistry rootsCell: @ 16r5F7402A gateFunction: @ 16r5F74004 heap: a NBMacExternalHeapManager NativeBoost class>>loadSymbol:fromModule: Receiver: NativeBoost Arguments and temporary variables: aSymbolName: 'munmap' moduleName: -2 Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#CLibrary->(NativeBoost>>#CLibrary "a CompiledMe...etc... format: 142 instanceVariables: #('bootstrapping' 'insideCallback' 'callbackCounterAddr' 'ex...etc... organization: ('retrieving symbols' CLibrary VMModule ioLoadFunction:from: ioLo...etc... subclasses: {NativeBoostLinux32. NativeBoostWin32} name: #NativeBoost classPool: a Dictionary(#Current->a NativeBoostMac32 #NBAnnouncer->an Announcer...etc... sharedPools: an OrderedCollection(AJx86Registers NativeBoostConstants) environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core' traitComposition: {} localSelectors: nil NBMacExternalHeapManager class(Object)>>nbGetSymbolAddress:module: Receiver: NBMacExternalHeapManager Arguments and temporary variables: aName: 'munmap' aModuleNameOrHandle: -2 addr: nil Receiver's instance variables: superclass: NBExternalHeapManager methodDict: a MethodDictionary(#mapFlags->(NBMacExternalHeapManager>>#mapFlags ...etc... format: 138 instanceVariables: nil organization: ('as yet unclassified' mapFlags mmapLength:prot:flags:into: primA...etc... subclasses: nil name: #NBMacExternalHeapManager classPool: nil sharedPools: an OrderedCollection(NBMacConstants) environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Mac' traitComposition: {} localSelectors: nil [:gen | fnAddress := requestor nbGetSymbolAddress: fnSpec functionName module: aModuleNameOrHandle. fnAddress ifNil: [self error: 'function unavailable']. self optMayGC ifTrue: [asm push: fnAddress asUImm32; mov: NativeBoost callgateFunctionAddress asUImm32 to: EAX; call: EAX] ifFalse: [asm mov: fnAddress asUImm32 to: EAX; call: EAX]] in NBFFICallout>>generateCall:module: Receiver: a NBFFICallout Arguments and temporary variables: aModuleNameOrHandle: a NBFFICallout fnAddress: -2 gen: #(nil) Receiver's instance variables: asm: an AJx86Assembler proxy: a NBInterpreterProxy options: a Set(#optCdecl #optAllowByteArraysPtr #optUseStackPointer #optReturnP...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... fnSpec: a NBFnSpec requestor: NBMacExternalHeapManager methodArgs: an OrderedCollection('addr' 'len') coercionMayFail: true callInfo: an AJCdeclCallInfo BlockClosure>>valueWithPossibleArgs: Receiver: [:gen | fnAddress := requestor nbGetSymbolAddress: fnSpec functionName module: aModuleNam...etc... Arguments and temporary variables: anArray: an Array(a NBFFICallout a NBInterpreterProxy an AJx86Assembler) Receiver's instance variables: outerContext: NBFFICallout>>generateCall:module: startpc: 91 numArgs: 1 [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self optEmitCall or: [self optNoCleanup]) ifTrue: [call disableCleanup]] in [:call | self optNoAlignment ifTrue: [call alignment: 1]. self pushArguments. coercionMayFail ifTrue: [proxy ifFailedJumpTo: self failedLabel]. asm decorateWith: 'FFI: performing a call' during: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self optEmitCall or: [self optNoCleanup]) ifTrue: [call disableCleanup]]] in NBFFICallout>>generateInstructions: Receiver: a NBFFICallout Arguments and temporary variables: aFunctionBodyBlock: an AJCdeclCallInfo call: [:gen | fnAddress := requestor nbGetSymbolAddress: fnSpec functionName m...etc... Receiver's instance variables: asm: an AJx86Assembler proxy: a NBInterpreterProxy options: a Set(#optCdecl #optAllowByteArraysPtr #optUseStackPointer #optReturnP...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... fnSpec: a NBFnSpec requestor: NBMacExternalHeapManager methodArgs: an OrderedCollection('addr' 'len') coercionMayFail: true callInfo: an AJCdeclCallInfo BlockClosure>>ensure: Receiver: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self optEmitCall or: [...etc... Arguments and temporary variables: aBlock: [level := level - 1. self addInstruction: (AJInstructionDecoration n...etc... complete: nil returnValue: nil Receiver's instance variables: outerContext: [:call | self optNoAlignment ifTrue: [call alignment: 1]. sel...etc... startpc: 155 numArgs: 0 AJx86Assembler>>decorateWith:during: Receiver: an AJx86Assembler Arguments and temporary variables: annotation: 'FFI: performing a call' aBlock: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self o...etc... Receiver's instance variables: instructions: <<error during printing>> [:call | self optNoAlignment ifTrue: [call alignment: 1]. self pushArguments. coercionMayFail ifTrue: [proxy ifFailedJumpTo: self failedLabel]. asm decorateWith: 'FFI: performing a call' during: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self optEmitCall or: [self optNoCleanup]) ifTrue: [call disableCleanup]]] in NBFFICallout>>generateInstructions: Receiver: a NBFFICallout Arguments and temporary variables: aFunctionBodyBlock: an AJCdeclCallInfo call: [:gen | fnAddress := requestor nbGetSymbolAddress: fnSpec functionName m...etc... Receiver's instance variables: asm: an AJx86Assembler proxy: a NBInterpreterProxy options: a Set(#optCdecl #optAllowByteArraysPtr #optUseStackPointer #optReturnP...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... fnSpec: a NBFnSpec requestor: NBMacExternalHeapManager methodArgs: an OrderedCollection('addr' 'len') coercionMayFail: true callInfo: an AJCdeclCallInfo AJx86Assembler>>performingCall:in: Receiver: an AJx86Assembler Arguments and temporary variables: ci: an AJCdeclCallInfo aBlock: [:call | self optNoAlignment ifTrue: [call alignment: 1]. self push...etc... Receiver's instance variables: instructions: <<error during printing>> NBFFICallout>>foreignCall: Receiver: a NBFFICallout Arguments and temporary variables: aBlock: [:call | self optNoAlignment ifTrue: [call alignment: 1]. self push...etc... Receiver's instance variables: asm: an AJx86Assembler proxy: a NBInterpreterProxy options: a Set(#optCdecl #optAllowByteArraysPtr #optUseStackPointer #optReturnP...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... fnSpec: a NBFnSpec requestor: NBMacExternalHeapManager methodArgs: an OrderedCollection('addr' 'len') coercionMayFail: true callInfo: an AJCdeclCallInfo NBFFICallout>>generateInstructions: Receiver: a NBFFICallout Arguments and temporary variables: aFunctionBodyBlock: [:gen | fnAddress := requestor nbGetSymbolAddress: fnSpec ...etc... instructions: nil Receiver's instance variables: asm: an AJx86Assembler proxy: a NBInterpreterProxy options: a Set(#optCdecl #optAllowByteArraysPtr #optUseStackPointer #optReturnP...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... fnSpec: a NBFnSpec requestor: NBMacExternalHeapManager methodArgs: an OrderedCollection('addr' 'len') coercionMayFail: true callInfo: an AJCdeclCallInfo NBFFICallout>>generate: Receiver: a NBFFICallout Arguments and temporary variables: aFunctionBodyBlock: [:gen | fnAddress := requestor nbGetSymbolAddress: fnSpec ...etc... generatedCode: nil Receiver's instance variables: asm: an AJx86Assembler proxy: a NBInterpreterProxy options: a Set(#optCdecl #optAllowByteArraysPtr #optUseStackPointer #optReturnP...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... fnSpec: a NBFnSpec requestor: NBMacExternalHeapManager methodArgs: an OrderedCollection('addr' 'len') coercionMayFail: true callInfo: an AJCdeclCallInfo NBFFICallout>>generateCall:module: Receiver: a NBFFICallout Arguments and temporary variables: functionSpec: #(#int #munmap #(#uint #addr #, #ulong #len)) aModuleNameOrHandle: -2 fnAddress: #(nil) Receiver's instance variables: asm: an AJx86Assembler proxy: a NBInterpreterProxy options: a Set(#optCdecl #optAllowByteArraysPtr #optUseStackPointer #optReturnP...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... fnSpec: a NBFnSpec requestor: NBMacExternalHeapManager methodArgs: an OrderedCollection('addr' 'len') coercionMayFail: true callInfo: an AJCdeclCallInfo [:gen | gen sender: sender; cdecl; generateCall: functionSpec module: aModuleName] in NBFFICallout class>>cdecl:module: Receiver: NBFFICallout Arguments and temporary variables: functionSpec: a NBFFICallout aModuleName: #(#int #munmap #(#uint #addr #, #ulong #len)) sender: -2 gen: NBMacExternalHeapManager>>unmap:length: Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil [bytes := aBlock value: (self newForMethod: method)] in NBFFICallout class(NBNativeCodeGen class)>>generateCode:andRetry: Receiver: NBFFICallout Arguments and temporary variables: aBlock: [:gen | gen sender: sender; cdecl; generateCall: functionSpec mod...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... bytes: #(nil) Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil BlockClosure>>on:do: Receiver: [bytes := aBlock value: (self newForMethod: method)] Arguments and temporary variables: exception: NBRecursionDetect handlerAction: [:ex | ex check: aMethod] handlerActive: true Receiver's instance variables: outerContext: NBFFICallout class(NBNativeCodeGen class)>>generateCode:andRetry:...etc... startpc: 96 numArgs: 0 NBRecursionDetect class>>in:during: Receiver: NBRecursionDetect Arguments and temporary variables: aMethod: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)...etc... aBlock: [bytes := aBlock value: (self newForMethod: method)] Receiver's instance variables: superclass: Notification methodDict: a MethodDictionary(#check:->(NBRecursionDetect>>#check: "a Compiled...etc... format: 144 instanceVariables: #('method') organization: ('as yet unclassified' check: defaultAction method signalForMetho...etc... subclasses: nil name: #NBRecursionDetect classPool: nil sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-Errors' traitComposition: {} localSelectors: nil NBFFICallout class(NBNativeCodeGen class)>>generateCode:andRetry: Receiver: NBFFICallout Arguments and temporary variables: aBlock: [:gen | gen sender: sender; cdecl; generateCall: functionSpec mod...etc... retryCtx: NBMacExternalHeapManager>>unmap:length: method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... newMethod: nil args: nil bytes: #(nil) Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil NBFFICallout class(NBNativeCodeGen class)>>handleFailureIn:nativeCode: Receiver: NBFFICallout Arguments and temporary variables: aContext: NBMacExternalHeapManager>>unmap:length: aBlock: [:gen | gen sender: sender; cdecl; generateCall: functionSpec mod...etc... method: (NBMacExternalHeapManager>>#unmap:length: "a CompiledMethod(355205120)"...etc... lastError: 502 Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil NBFFICallout class>>cdecl:module: Receiver: NBFFICallout Arguments and temporary variables: functionSpec: #(#int #munmap #(#uint #addr #, #ulong #len)) aModuleName: -2 sender: NBMacExternalHeapManager>>unmap:length: Receiver's instance variables: superclass: NBNativeCodeGen methodDict: a MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: "a...etc... format: 148 instanceVariables: #('fnSpec' 'requestor' 'methodArgs' 'coercionMayFail' 'callI...etc... organization: ('type aliases' aliasForType:) ('accessing' anonSpec: callType: c...etc... subclasses: {NBNativeFunctionGen} name: #NBFFICallout classPool: a Dictionary(#CustomErrorCodes->a Dictionary(600->'An instance of NB...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'NativeBoost-Core-FFI' traitComposition: {} localSelectors: nil NBMacExternalHeapManager>>unmap:length: Receiver: a NBMacExternalHeapManager Arguments and temporary variables: addr: 7380992 len: 32768 errorCode: 502 Receiver's instance variables: pages: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) freeBlocks: an IdentitySet(a NBMemoryBlock( @ 16r17D302E, 17, free) a NBMemoryB...etc... reservedBlocks: a Dictionary(24981504->a NBMemoryBlock( @ 16r17D3000, 38) 24981...etc... sema: a Semaphore() NBMacExternalHeapManager>>primFreePage: Receiver: a NBMacExternalHeapManager Arguments and temporary variables: aMemoryPage: a NBMemoryPage res: nil Receiver's instance variables: pages: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) freeBlocks: an IdentitySet(a NBMemoryBlock( @ 16r17D302E, 17, free) a NBMemoryB...etc... reservedBlocks: a Dictionary(24981504->a NBMemoryBlock( @ 16r17D3000, 38) 24981...etc... sema: a Semaphore() NBMacExternalHeapManager(NBExternalHeapManager)>>freePage: Receiver: a NBMacExternalHeapManager Arguments and temporary variables: aMemoryPage: a NBMemoryPage Receiver's instance variables: pages: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) freeBlocks: an IdentitySet(a NBMemoryBlock( @ 16r17D302E, 17, free) a NBMemoryB...etc... reservedBlocks: a Dictionary(24981504->a NBMemoryBlock( @ 16r17D3000, 38) 24981...etc... sema: a Semaphore() [:page | page length = aMemoryBlock length ifTrue: [self freePage: page. ^ true]. nil] in NBMacExternalHeapManager(NBExternalHeapManager)>>checkForFreePage: Receiver: a NBMacExternalHeapManager Arguments and temporary variables: aMemoryBlock: a NBMemoryPage page: a NBMemoryBlock( @ 16r70A000, 32768, free) Receiver's instance variables: pages: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) freeBlocks: an IdentitySet(a NBMemoryBlock( @ 16r17D302E, 17, free) a NBMemoryB...etc... reservedBlocks: a Dictionary(24981504->a NBMemoryBlock( @ 16r17D3000, 38) 24981...etc... sema: a Semaphore() BlockClosure>>cull: Receiver: [:page | page length = aMemoryBlock length ifTrue: [self freePage: page. ^ true]. n...etc... Arguments and temporary variables: anArg: a NBMemoryPage Receiver's instance variables: outerContext: NBMacExternalHeapManager(NBExternalHeapManager)>>checkForFreePage...etc... startpc: 41 numArgs: 1 Dictionary>>at:ifPresent: Receiver: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) Arguments and temporary variables: key: 7380992 aBlock: [:page | page length = aMemoryBlock length ifTrue: [self freePage: p...etc... assoc: 7380992->a NBMemoryPage Receiver's instance variables: tally: 2 array: an Array(nil 100089856->a NBMemoryPage nil nil 24981504->a NBMemoryPage)...etc... NBMacExternalHeapManager(NBExternalHeapManager)>>checkForFreePage: Receiver: a NBMacExternalHeapManager Arguments and temporary variables: aMemoryBlock: a NBMemoryBlock( @ 16r70A000, 32768, free) Receiver's instance variables: pages: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) freeBlocks: an IdentitySet(a NBMemoryBlock( @ 16r17D302E, 17, free) a NBMemoryB...etc... reservedBlocks: a Dictionary(24981504->a NBMemoryBlock( @ 16r17D3000, 38) 24981...etc... sema: a Semaphore() NBMemoryBlock>>makeFreeFor: Receiver: a NBMemoryBlock( @ 16r70A030, 32720, free) Arguments and temporary variables: heapManager: a NBMacExternalHeapManager Receiver's instance variables: left: a NBMemoryBlock( @ 16r70A000, 32768, free) right: nil address: 7381040 length: 32720 free: true [| block | block := reservedBlocks removeKey: address ifAbsent: [self error: 'Unable to find a memory block with given address']. block makeFreeFor: self] in NBMacExternalHeapManager(NBExternalHeapManager)>>free: Receiver: a NBMacExternalHeapManager Arguments and temporary variables: address: 7381040 block: a NBMemoryBlock( @ 16r70A030, 32720, free) Receiver's instance variables: pages: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) freeBlocks: an IdentitySet(a NBMemoryBlock( @ 16r17D302E, 17, free) a NBMemoryB...etc... reservedBlocks: a Dictionary(24981504->a NBMemoryBlock( @ 16r17D3000, 38) 24981...etc... sema: a Semaphore() [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 NBMacExternalHeapManager(NBExternalHeapManager)>>free: Receiver: a NBMacExternalHeapManager Arguments and temporary variables: address: 7381040 Receiver's instance variables: pages: a Dictionary(24981504->a NBMemoryPage 100089856->a NBMemoryPage ) freeBlocks: an IdentitySet(a NBMemoryBlock( @ 16r17D302E, 17, free) a NBMemoryB...etc... reservedBlocks: a Dictionary(24981504->a NBMemoryBlock( @ 16r17D3000, 38) 24981...etc... sema: a Semaphore() --- The full stack --- NBFFICallout class>>signalError: NBFFICallout class(NBNativeCodeGen class)>>handleFailureIn:nativeCode: NBFFICallout class>>cdecl:emitCall:options: NativeBoostMac32(NativeBoost)>>bootstrapLoadSymbol:ofLength:fromModule:into: NativeBoostMac32(NativeBoost)>>loadSymbol:fromModule: NativeBoostMac32(NativeBoostLinux32)>>loadSymbol:fromModule: NativeBoost class>>loadSymbol:fromModule: NBMacExternalHeapManager class(Object)>>nbGetSymbolAddress:module: [:gen | fnAddress := requestor nbGetSymbolAddress: fnSpec functionName module: aModuleNameOrHandle. fnAddress ifNil: [self error: 'function unavailable']. self optMayGC ifTrue: [asm push: fnAddress asUImm32; mov: NativeBoost callgateFunctionAddress asUImm32 to: EAX; call: EAX] ifFalse: [asm mov: fnAddress asUImm32 to: EAX; call: EAX]] in NBFFICallout>>generateCall:module: BlockClosure>>valueWithPossibleArgs: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self optEmitCall or: [self optNoCleanup]) ifTrue: [call disableCleanup]] in [:call | self optNoAlignment ifTrue: [call alignment: 1]. self pushArguments. coercionMayFail ifTrue: [proxy ifFailedJumpTo: self failedLabel]. asm decorateWith: 'FFI: performing a call' during: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self optEmitCall or: [self optNoCleanup]) ifTrue: [call disableCleanup]]] in NBFFICallout>>generateInstructions: BlockClosure>>ensure: AJx86Assembler>>decorateWith:during: [:call | self optNoAlignment ifTrue: [call alignment: 1]. self pushArguments. coercionMayFail ifTrue: [proxy ifFailedJumpTo: self failedLabel]. asm decorateWith: 'FFI: performing a call' during: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. (self optEmitCall or: [self optNoCleanup]) ifTrue: [call disableCleanup]]] in NBFFICallout>>generateInstructions: AJx86Assembler>>performingCall:in: NBFFICallout>>foreignCall: NBFFICallout>>generateInstructions: NBFFICallout>>generate: NBFFICallout>>generateCall:module: [:gen | gen sender: sender; cdecl; generateCall: functionSpec module: aModuleName] in NBFFICallout class>>cdecl:module: [bytes := aBlock value: (self newForMethod: method)] in NBFFICallout class(NBNativeCodeGen class)>>generateCode:andRetry: BlockClosure>>on:do: NBRecursionDetect class>>in:during: NBFFICallout class(NBNativeCodeGen class)>>generateCode:andRetry: NBFFICallout class(NBNativeCodeGen class)>>handleFailureIn:nativeCode: NBFFICallout class>>cdecl:module: NBMacExternalHeapManager>>unmap:length: NBMacExternalHeapManager>>primFreePage: NBMacExternalHeapManager(NBExternalHeapManager)>>freePage: [:page | page length = aMemoryBlock length ifTrue: [self freePage: page. ^ true]. nil] in NBMacExternalHeapManager(NBExternalHeapManager)>>checkForFreePage: BlockClosure>>cull: Dictionary>>at:ifPresent: NBMacExternalHeapManager(NBExternalHeapManager)>>checkForFreePage: NBMemoryBlock>>makeFreeFor: [| block | block := reservedBlocks removeKey: address ifAbsent: [self error: 'Unable to find a memory block with given address']. block makeFreeFor: self] in NBMacExternalHeapManager(NBExternalHeapManager)>>free: [caught := true. self wait. blockValue := mutuallyExcludedBlock value] in Semaphore>>critical: BlockClosure>>ensure: Semaphore>>critical: NBMacExternalHeapManager(NBExternalHeapManager)>>free: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NativeBoostMac32(NativeBoostLinux32)>>free: NativeBoost class>>free: NBExternalAddress>>free [:pointer | pointer value free] in LimboCommand>>freePointers Set>>do: LimboCommand>>freePointers [self freePointers] in LimboCommand>>run BlockClosure>>ensure: LimboCommand>>run Limbo>>run:arguments: Limbo>>runSh: Limbo class>>runSh: [limbo := Limbo runSh: '/bin/echo ' , arg] in LimboTest>>testShellCommandWithNewLines [aBlock value. false] in LimboTest(TestCase)>>executeShould:inScopeOf: BlockClosure>>on:do: LimboTest(TestCase)>>executeShould:inScopeOf: LimboTest(TestCase)>>shouldnt:raise: LimboTest>>testShellCommandWithNewLines LimboTest(TestCase)>>performTest [self setUp. self performTest] in LimboTest(TestCase)>>runCase BlockClosure>>ensure: LimboTest(TestCase)>>runCase [(self class selector: testSelector) runCase] in LimboTest(TestCase)>>debug BlockClosure>>ensure: LimboTest(TestCase)>>debug OBCmdRunTests>>execute [:each | (each isActive and: [each isEnabled]) ifTrue: [each execute. ^ true]. nil] in OBNodeCommandScan(OBCommandScan)>>processKeystroke:withNode:for: OrderedCollection>>do: OBNodeCommandScan(OBCommandScan)>>processKeystroke:withNode:for: [:each | (scan processKeystroke: aCharacter asKeystroke withNode: each for: self) ifTrue: [^ self]. nil] in OBColumn>>keystroke:from: OrderedCollection>>reverseDo: OBColumn>>keystroke:from: OBPluggableListMorph(PluggableListMorph)>>modifierKeyPressed: OBPluggableListMorph(PluggableListMorph)>>keyStroke: OBPluggableListMorph(Morph)>>handleKeystroke: KeyboardEvent>>sentTo: OBPluggableListMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: OBPluggableListMorph(Morph)>>processEvent:using: OBPluggableListMorph(Morph)>>processEvent: OBPluggableListMorph(PluggableListMorph)>>handleFocusEvent: [ActiveHand := self. ActiveEvent := anEvent. result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self))] in HandMorph>>sendFocusEvent:to:clear: [aBlock value] in PasteUpMorph>>becomeActiveDuring: BlockClosure>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendKeyboardEvent: HandMorph>>handleEvent: HandMorph>>processEvents [:h | ActiveHand := h. h processEvents. ActiveHand := nil] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [[World doOneCycle. Processor yield. false] whileFalse. nil] in MorphicUIManager>>spawnNewProcess [self value. Processor terminateActive] in BlockClosure>>newProcess
