Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
November 2012
- 98 participants
- 1194 messages
Re: [Pharo-project] OSProcess in Pharo 2.0
by Max Leske
:D Thanks Damien
On 15.11.2012, at 16:47, Damien Cassou <damien.cassou(a)gmail.com> wrote:
> On Tue, Nov 13, 2012 at 11:24 AM, Max Leske <maxleske(a)gmail.com> wrote:
>> I'm working on a simple library for NativeBoost that will execute commands on the shell and return stdin and stderr to the image.
>> This will take me one or two weeks to complete though. Once I'm finished I'll post it on the list (I guess there's a lot of people who would want something like this). This library should (hopefully) make OSProcess obsolete.
>
> pleasssseeeeeee
>
> --
> Damien Cassou
> http://damiencassou.seasidehosting.st
>
> "Success is the ability to go from one failure to another without
> losing enthusiasm."
> Winston Churchill
>
Nov. 15, 2012
[Pharo-project] [NativeBoost] calls to munmap always fail on OS X 10.8.2
by Max Leske
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 <siguctua(a)gmail.com> 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
Nov. 15, 2012
Re: [Pharo-project] yielding to command line
by Igor Stasenko
How about fixing windows VM?
Ugly but should work :)
On 15 November 2012 12:45, Bruni camillo <camillobruni(a)gmail.com> wrote:
> How about forking directly at the beginning, then busy wait in bash for a
> certain file to be created at the end of the st script and only then
> continue.
>
> Ugly but should work
>
> On 15 Nov 2012 16:06, "Tudor Girba" <tudor(a)tudorgirba.com> wrote:
>>
>> Hi,
>>
>> Actually, the reason why I cannot use this solution is that on Windows,
>> when I have a large enough image, I can build it, I can save it even, but I
>> cannot reopen it. Hence my only way around it is to not close it :).
>>
>> Cheers,
>> Doru
>>
>>
>> On 15 Nov 2012, at 14:23, Camillo Bruni <camillobruni(a)gmail.com> wrote:
>>
>> >
>> > On 2012-11-14, at 11:07, Tudor Girba <tudor(a)tudorgirba.com> wrote:
>> >
>> >> Hi,
>> >>
>> >> I have the following requirement:
>> >> - I start an image from the command line with an initial script
>> >> - I want to wait until the Smalltalk script finishes until I can
>> >> continue
>> >> with the command line script
>> >> - But, I do not want to stop the image
>> >>
>> >> I can achieve the first two points by having the image quit at the end.
>> >> Is
>> >> there a way in which I can somehow continue the command line execution
>> >> without stopping the image?
>> >
>> > I don't know the details but if you save+quit your image and immediately
>> > open
>> > it again it will continue where you where before. so the following is
>> > the
>> > closest thing I can come up with
>> >
>> > ./vm.sh Pharo.image st doStuffAndSave.st;
>> > ./vm.sh Pharo.image & # relaunch and fork to background
>> > ./doStuffAfter.sh
>> >
>> > but yeah, that violates your not-image-stop requirement :)
>> >
>>
>> --
>> www.tudorgirba.com
>>
>> "Being happy is a matter of choice."
>>
>>
>>
>>
>
--
Best regards,
Igor Stasenko.
Nov. 15, 2012
Re: [Pharo-project] yielding to command line
by Stefan Marr
How about:
FD=3
exec $FD< <(nohup ./vm.sh Pharo.image st doStuffAndSave.st)
read -n 1 -u $FD
echo $REPLY
exec $FD<&-
runs image in background, reads one character from it's output, and output's it.
Will close the $FD (file descriptor at the end)
See:
http://wiki.bash-hackers.org/commands/builtin/read
http://ubuntuforums.org/showthread.php?t=979694
Works probably with a cygwin bash, too.
On 15 Nov 2012, at 16:45, Bruni camillo wrote:
> > ./vm.sh Pharo.image st doStuffAndSave.st;
> > ./vm.sh Pharo.image & # relaunch and fork to background
> > ./doStuffAfter.sh
> >
> > but yeah, that violates your not-image-stop requirement :)
> >
>
> --
> www.tudorgirba.com
>
> "Being happy is a matter of choice."
>
>
>
>
--
Stefan Marr
Software Languages Lab
Vrije Universiteit Brussel
Pleinlaan 2 / B-1050 Brussels / Belgium
http://soft.vub.ac.be/~smarr
Phone: +32 2 629 2974
Fax: +32 2 629 3525
Nov. 15, 2012
[Pharo-project] [Pharo-Project] About new TxText text model
by Denis Kudriashov
Hello.
I look deep at TxText package where Igor and Camillo introduced new text
model.
Text model based on sequence of span objects. There are now two kind of
spans: CharacterSpan and LineSeparator. Each span has reference to next and
previous spans. There is TxSelection object which contains cursor. So you
can insert new text at cursor, you can cut selection, replace selection
with another text. Such maniulation changes text model structure. It can
create new span objects. It can split current span at cursor position, It
can remove selected spans. Also you can move cursor up, down, left, right.
Cursor always know about current span and span position.
I like design :). And I want use this package. And I have questions and
suggestions:
1) Cursor is end of selection object. So now when you move cursor selection
changed, because start of selection stay same. Am I right?
I think cursor movement should always reset selection. It is what we see
with basic text editors.
But cursor now is just instance of TxPosition which implements simple
position protocol (move left, up...). It just change current span and span
position by movement. TxPosition knows nothing about TxSelection object.
That's why I think Cursor class should be introduced here which alway reset
text selection by any move.
And if you want to change selection bounds just get explicitly start or end
of selection and use position api.
What do you think?
2) Next question about changes notification of text model. First I want
Cursor and Selection objects are annnouncers. So I can implement
CursorPresenter and SelectionPresenter to show such objects and handle
changes. For example when CursorMovedAnnouncement happen I can move cursor
caret morph at appropriate position.
Another idea is make span objects announcers. Maybe it is not good idea but
I want to subscribe at SpanAdded, SpanRemoved. SpanChanged, SpanSplitted.
With such events I can make very simple implementation of TextEditor as
list of SpanMorph's. Maybe it is not optimized solution but I think it is
most simple thing. So I want to try it.
3) What about auto wrap behaviour?
If you have auto wrap option at text editors you have line width
restriction. And you should spit real lines of text to visual lines which
satisfed this restriction. And text mode should know about such restriction
because any text insertion can require new visual lines creation.
I think insertion single line text at span position should be executed by
special "restriction object". It should return new characters of span which
satisfied that restriction. And it should return new span object (or just
remains characters) which will present new visual lines. Then this "remains
characters" should be inserted to next span at 0 position.
When wrap behavior not needed "restriction object" just inserts new text
into current characters at given position and returns result.
If you agree about such logic please suggest good name for such
"restriction object" and instance variable where it will placed (at TxModel
I think)
Ok, now what do you think about all this?
I want implement all my suggestions. But first I want listen your opinions.
Best regards,
Denis
Nov. 15, 2012
Re: [Pharo-project] download scripts for the new infrastructure
by Bruni camillo
On 15 Nov 2012 16:33, "Pavel Krivanek" <pavel.krivanek(a)gmail.com> wrote:
>
> It would be fine to have an option in ConfigurationCommandLineHandler
> to print job [version] for CI build description. Pharo version and
> Configuration version.
Yes, that's definitely missing, the last step to create the numbered pharo
zip files.
> Options for selection of VM and Pharo versions would be fine too in
> such script. For example if you want run the job on StackVM on Pharo
> 1.4 or Pharo Kernel etc.
I will some more separate scripts to fetch vms by name. I just want to keep
the scripts dead simple, because after 10 years of programming I still
haver no clue about bash ;)
> -- Pavel
>
> On Thu, Nov 15, 2012 at 3:11 PM, Camillo Bruni <camillobruni(a)gmail.com>
wrote:
> >
> > On 2012-11-14, at 14:32, Pavel Krivanek <pavel.krivanek(a)gmail.com>
wrote:
> >
> >> Hi,
> >>
> >> we need to modify (or create new)
> >> http://pharo.gforge.inria.fr/ci/ciPharo20.sh and related scripts to
> >> use the new infrastructure. Has someone rights and time to do that?
> >
> > the ci*.sh are already self contained and only download stuff from
> > the files statically served under http://pharo.gforge.inria.fr/ci/*
> >
> > so the scripts should be fine and contain no references to the build
server.
> >
> > So the infrastructure (will go) goes like this (comments and
improvements welcome!)
> >
> > http://ci.inria.fr/pharo
> > - Pharo.image => push results to
http://pharo.gforge.inria.fr/ci/image/
> > - CogVM / NBCogVM => push results http://pharo.gforge.inria.fr/ci/vm/
> >
> > all other build scripts should be in the form:
> >
----------------------------------------------------------------------------------
> > wget --quiet -qO - http://pharo.gforge.inria.fr/ci/ciPharo20Cog.sh | sh
> >
> > ./vm.sh Pharo.image save $JOB_NAME --delete-old
> >
> > REPO=http://smalltalkhub.com/mc/dh83/nabujito/main
> > ./vm.sh $JOB_NAME.image config $REPO ConfigurationOfNabujito
--install=development
> > ./vm.sh $JOB_NAME.image test --junit-xml-output "Nabujito-.*"
> >
> > zip -r $JOB_NAME.zip $JOB_NAME.image $JOB_NAME.changes
> >
----------------------------------------------------------------------------------
> >
> > GOAL:
> > - 1 single bash scripts with contents similar to the example above
> > - No additional build.sh / install.st scripts
> > - No more Jenkins dependencies (copy scripts, getting VM, getting Image)
> > - Always use the latest VMs / Images provided through
http://pharo.gforge.inria.fr/ci/ciPharo20Cog.sh and Co
> >
> >
> >
> > best
> > cami
>
Nov. 15, 2012
Re: [Pharo-project] OSProcess in Pharo 2.0
by Damien Cassou
On Tue, Nov 13, 2012 at 11:24 AM, Max Leske <maxleske(a)gmail.com> wrote:
> I'm working on a simple library for NativeBoost that will execute commands on the shell and return stdin and stderr to the image.
> This will take me one or two weeks to complete though. Once I'm finished I'll post it on the list (I guess there's a lot of people who would want something like this). This library should (hopefully) make OSProcess obsolete.
pleasssseeeeeee
--
Damien Cassou
http://damiencassou.seasidehosting.st
"Success is the ability to go from one failure to another without
losing enthusiasm."
Winston Churchill
Nov. 15, 2012
Re: [Pharo-project] yielding to command line
by Bruni camillo
How about forking directly at the beginning, then busy wait in bash for a
certain file to be created at the end of the st script and only then
continue.
Ugly but should work
On 15 Nov 2012 16:06, "Tudor Girba" <tudor(a)tudorgirba.com> wrote:
> Hi,
>
> Actually, the reason why I cannot use this solution is that on Windows,
> when I have a large enough image, I can build it, I can save it even, but I
> cannot reopen it. Hence my only way around it is to not close it :).
>
> Cheers,
> Doru
>
>
> On 15 Nov 2012, at 14:23, Camillo Bruni <camillobruni(a)gmail.com> wrote:
>
> >
> > On 2012-11-14, at 11:07, Tudor Girba <tudor(a)tudorgirba.com> wrote:
> >
> >> Hi,
> >>
> >> I have the following requirement:
> >> - I start an image from the command line with an initial script
> >> - I want to wait until the Smalltalk script finishes until I can
> continue
> >> with the command line script
> >> - But, I do not want to stop the image
> >>
> >> I can achieve the first two points by having the image quit at the end.
> Is
> >> there a way in which I can somehow continue the command line execution
> >> without stopping the image?
> >
> > I don't know the details but if you save+quit your image and immediately
> open
> > it again it will continue where you where before. so the following is the
> > closest thing I can come up with
> >
> > ./vm.sh Pharo.image st doStuffAndSave.st;
> > ./vm.sh Pharo.image & # relaunch and fork to background
> > ./doStuffAfter.sh
> >
> > but yeah, that violates your not-image-stop requirement :)
> >
>
> --
> www.tudorgirba.com
>
> "Being happy is a matter of choice."
>
>
>
>
>
Nov. 15, 2012
Re: [Pharo-project] download scripts for the new infrastructure
by Pavel Krivanek
It would be fine to have an option in ConfigurationCommandLineHandler
to print job [version] for CI build description. Pharo version and
Configuration version.
Options for selection of VM and Pharo versions would be fine too in
such script. For example if you want run the job on StackVM on Pharo
1.4 or Pharo Kernel etc.
-- Pavel
On Thu, Nov 15, 2012 at 3:11 PM, Camillo Bruni <camillobruni(a)gmail.com> wrote:
>
> On 2012-11-14, at 14:32, Pavel Krivanek <pavel.krivanek(a)gmail.com> wrote:
>
>> Hi,
>>
>> we need to modify (or create new)
>> http://pharo.gforge.inria.fr/ci/ciPharo20.sh and related scripts to
>> use the new infrastructure. Has someone rights and time to do that?
>
> the ci*.sh are already self contained and only download stuff from
> the files statically served under http://pharo.gforge.inria.fr/ci/*
>
> so the scripts should be fine and contain no references to the build server.
>
> So the infrastructure (will go) goes like this (comments and improvements welcome!)
>
> http://ci.inria.fr/pharo
> - Pharo.image => push results to http://pharo.gforge.inria.fr/ci/image/
> - CogVM / NBCogVM => push results http://pharo.gforge.inria.fr/ci/vm/
>
> all other build scripts should be in the form:
> ----------------------------------------------------------------------------------
> wget --quiet -qO - http://pharo.gforge.inria.fr/ci/ciPharo20Cog.sh | sh
>
> ./vm.sh Pharo.image save $JOB_NAME --delete-old
>
> REPO=http://smalltalkhub.com/mc/dh83/nabujito/main
> ./vm.sh $JOB_NAME.image config $REPO ConfigurationOfNabujito --install=development
> ./vm.sh $JOB_NAME.image test --junit-xml-output "Nabujito-.*"
>
> zip -r $JOB_NAME.zip $JOB_NAME.image $JOB_NAME.changes
> ----------------------------------------------------------------------------------
>
> GOAL:
> - 1 single bash scripts with contents similar to the example above
> - No additional build.sh / install.st scripts
> - No more Jenkins dependencies (copy scripts, getting VM, getting Image)
> - Always use the latest VMs / Images provided through http://pharo.gforge.inria.fr/ci/ciPharo20Cog.sh and Co
>
>
>
> best
> cami
Nov. 15, 2012
Re: [Pharo-project] [Pharo-consortium] Pharo Association
by Tudor Girba
I see. I tried that just now, but it hangs after I press sign up.
Cheers,
Doru
On 15 Nov 2012, at 16:12, Marcus Denker <marcus.denker(a)inria.fr> wrote:
>
> On Nov 15, 2012, at 12:01 PM, Tudor Girba <tudor(a)tudorgirba.com> wrote:
>
>> Great.
>>
>> Just a note: I even want to pay. I just do not know how to do it. Perhaps this little piece of information should be available somewhere :)
>>
>
> -> add an account
> -> there is a menu item then for that.
>
>> Cheers,
>> Doru
>>
>>
>> On 15 Nov 2012, at 14:51, Marcus Denker <marcus.denker(a)inria.fr> wrote:
>>
>>> Hello,
>>>
>>> We are happy to announce the Pharo User Association:
>>>
>>> http://association.pharo.org
>>>
>>> The goal of the Pharo User Association is to support Pharo development and
>>> promotion.
>>>
>>> There are two individual memberships
>>>
>>> - Individual Pharo Association Member: Yearly fee 40 Euros
>>> - Golden Individual Pharo Association Member: Yearly fee 99 Euros
>>>
>>> You will get
>>> - reduction access to pharo conferences,
>>> - reduction for training and access to teaching material,
>>> - be part of the pharoAssociation-individual-members mailing-list,
>>> - an account at the pharo association web site.
>>>
>>> This Association is complementary to the Pharo consortium managed by INRIA.
>>> The Consortium is for entities such as companies, research teams, or institutes.
>>> For more information, see: http://www.pharo-project.org/community/consortium
>>>
>>> The funds collected by the Association will be used in coordination with the Consortium
>>> to support the development of Pharo.
>>>
>>> The Pharo Board and Pharo Core Team.
>>>
>>>
>>> _______________________________________________
>>> Pharo-consortium mailing list
>>> Pharo-consortium(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-consortium
>>
>> --
>> www.tudorgirba.com
>>
>> "It's not what we do that matters most, it's how we do it."
>>
>
> --
> Marcus Denker -- http://marcusdenker.de
>
--
www.tudorgirba.com
"From an abstract enough point of view, any two things are similar."
Nov. 15, 2012