Sven Van Caekenberghe wrote:
Hi,
User Herby Vojčík seems to have an issue with the --headless option on Windows
10
https://pharo.fogbugz.com/f/cases/20271/ZnServer-managedServers-disappear-when-headless-mode-used
I cannot reproduce his problem.
Maybe there are Windows users out there who can have a look and help him ?
Thx,
Sven
But from the PharoDebug.log I sent to the issue (and send here as you
wanted to continue discussion here) it should be clear self isRunning
wasn't false, even if both process and serverSocket are shown as nil.
Very strange.
Somewhere between headless W10 shutdown and W10 ui startup something
must be broken that made Zinc unregister the running and registered server.
Herby
THERE_BE_DRAGONS_HERE
Error: Unregistering a server!
25 July 2017 8:49:38.139084 pm
VM: Win32 - IX86 - 10.0 - CoInterpreter VMMaker.oscog-eem.2254 uuid:
4f2c2cce-f4a2-469a-93f1-97ed941df0ad Jul 20 2017
StackToRegisterMappingCogit VMMaker.oscog-eem.2252 uuid:
2f3e9b0e-ecd3-4adf-b092-cce2e2587a5c Jul 20 2017
VM: 201707201942 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ Date:
Thu Jul 20 12:42:21 2017 -0700 $ Plugins: 201707201942
https://github.com/OpenSmalltalk/opensmalltalk-vm.git $
Image: Pharo6.0 [Latest update: #60510]
ZnManagingMultiThreadedServer class(ZnServer class)>>unregister:
Receiver: ZnManagingMultiThreadedServer
Arguments and temporary variables:
server: a ZnManagingMultiThreadedServer(stopped 4998)
Receiver's instance variables:
superclass: ZnMultiThreadedServer
methodDict: a
MethodDictionary(#closeConnections->ZnManagingMultiThreadedServer...etc...
format: 65543
layout: a FixedLayout
instanceVariables: nil
organization: a ClassOrganization
subclasses: nil
name: #ZnManagingMultiThreadedServer
classPool: a Dictionary()
sharedPools: nil
environment: a SystemDictionary(lots of globals)
category: #'Zinc-HTTP-Client-Server'
traitComposition: {}
localSelectors: nil
Default: nil
ZnManagingMultiThreadedServer(ZnServer)>>unregister
Receiver: a ZnManagingMultiThreadedServer(stopped 4998)
Arguments and temporary variables:
Receiver's instance variables:
options: a Dictionary(#delegate->a TowergameDelegate
#port->4998 )
sessionManager: nil
process: nil
serverSocket: nil
logLevel: 3
lock: nil
connections: an OrderedCollection()
ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>stop:
Receiver: a ZnManagingMultiThreadedServer(stopped 4998)
Arguments and temporary variables:
unregister: true
Receiver's instance variables:
options: a Dictionary(#delegate->a TowergameDelegate
#port->4998 )
sessionManager: nil
process: nil
serverSocket: nil
logLevel: 3
lock: nil
connections: an OrderedCollection()
ZnManagingMultiThreadedServer>>stop:
Receiver: a ZnManagingMultiThreadedServer(stopped 4998)
Arguments and temporary variables:
unregister: true
Receiver's instance variables:
options: a Dictionary(#delegate->a TowergameDelegate
#port->4998 )
sessionManager: nil
process: nil
serverSocket: nil
logLevel: 3
lock: nil
connections: an OrderedCollection()
ZnManagingMultiThreadedServer(ZnServer)>>stop
Receiver: a ZnManagingMultiThreadedServer(stopped 4998)
Arguments and temporary variables:
Receiver's instance variables:
options: a Dictionary(#delegate->a TowergameDelegate
#port->4998 )
sessionManager: nil
process: nil
serverSocket: nil
logLevel: 3
lock: nil
connections: an OrderedCollection()
ZnManagingMultiThreadedServer(ZnSingleThreadedServer)>>start
Receiver: a ZnManagingMultiThreadedServer(stopped 4998)
Arguments and temporary variables:
Receiver's instance variables:
options: a Dictionary(#delegate->a TowergameDelegate
#port->4998 )
sessionManager: nil
process: nil
serverSocket: nil
logLevel: 3
lock: nil
connections: an OrderedCollection()
[ :each | each start ] in [ self managedServers do: [ :each | each start ] ] in
[ :manager |
manager default currentSession
addDeferredStartupAction: [ self managedServers do: [ :each | each
start ] ] ] in ZnServer class>>startUp:
Receiver: ZnServer
Arguments and temporary variables:
resuming: true
manager: SessionManager
each: a ZnManagingMultiThreadedServer(stopped 4998)
Receiver's instance variables:
superclass: Object
methodDict: a
MethodDictionary(#authenticator->ZnServer>>#authenticator #authen...etc...
format: 65538
layout: a FixedLayout
instanceVariables: nil
organization: a ClassOrganization
subclasses: {ZnSingleThreadedServer}
name: #ZnServer
classPool: a Dictionary(#AlwaysRestart->true
#ManagedServers->an IdentitySet(a ...etc...
sharedPools: an OrderedCollection()
environment: a SystemDictionary(lots of globals)
category: #'Zinc-HTTP-Client-Server'
traitComposition: {}
localSelectors: nil
IdentitySet(Set)>>do:
Receiver: an IdentitySet(a ZnManagingMultiThreadedServer(stopped 4998))
Arguments and temporary variables:
aBlock: [ :each | each start ]
index: 7
each: a ZnManagingMultiThreadedServer(stopped 4998)
Receiver's instance variables:
tally: 1
array: an Array(nil nil nil nil nil nil a
ZnManagingMultiThreadedServer(stopped...etc...
[ self managedServers do: [ :each | each start ] ] in [ :manager |
manager default currentSession
addDeferredStartupAction: [ self managedServers do: [ :each | each
start ] ] ] in ZnServer class>>startUp:
Receiver: ZnServer
Arguments and temporary variables:
resuming: true
manager: SessionManager
Receiver's instance variables:
superclass: Object
methodDict: a
MethodDictionary(#authenticator->ZnServer>>#authenticator #authen...etc...
format: 65538
layout: a FixedLayout
instanceVariables: nil
organization: a ClassOrganization
subclasses: {ZnSingleThreadedServer}
name: #ZnServer
classPool: a Dictionary(#AlwaysRestart->true
#ManagedServers->an IdentitySet(a ...etc...
sharedPools: an OrderedCollection()
environment: a SystemDictionary(lots of globals)
category: #'Zinc-HTTP-Client-Server'
traitComposition: {}
localSelectors: nil
BlockClosure>>cull:
Receiver: [ self managedServers do: [ :each | each start ] ]
Arguments and temporary variables:
anArg: true
Receiver's instance variables:
outerContext: [ :manager |
manager default currentSession
addDeferredStartupA...etc...
startpc: 83
numArgs: 0
WorkingSession>>executeDeferredStartupActions:
Receiver: a WorkingSession
Arguments and temporary variables:
resuming: true
action: [ self managedServers do: [ :each | each start
] ]
Receiver's instance variables:
manager: a SessionManager
deferredStartupActions: an OrderedCollection()
id: nil
creationTime: 2017-07-25T20:47:08.326981+02:00
WorkingSession>>runStartup:
Receiver: a WorkingSession
Arguments and temporary variables:
isImageStarting: true
Receiver's instance variables:
manager: a SessionManager
deferredStartupActions: an OrderedCollection()
id: nil
creationTime: 2017-07-25T20:47:08.326981+02:00
WorkingSession>>start:
Receiver: a WorkingSession
Arguments and temporary variables:
isImageStarting: true
Receiver's instance variables:
manager: a SessionManager
deferredStartupActions: an OrderedCollection()
id: nil
creationTime: 2017-07-25T20:47:08.326981+02:00
SessionManager>>snapshot:andQuit:
Receiver: a SessionManager
Arguments and temporary variables:
save: true
quit: false
isImageStarting: true
snapshotResult: true
Receiver's instance variables:
currentSession: a WorkingSession
categories: an OrderedCollection(a SessionCategory(System)
a SessionCategory(Ne...etc...
guiCategory: a SessionCategory(Graphical User Interface)
toolsCategory: a SessionCategory(Tools)
networkCategory: a SessionCategory(Network)
systemCategory: a SessionCategory(System)
userCategory: a SessionCategory(User)
[ ^ SessionManager default snapshot: save andQuit: quit ] in
SmalltalkImage>>snapshot:andQuit:
Receiver: Smalltalk
Arguments and temporary variables:
save: true
quit: false
Receiver's instance variables:
globals: a SystemDictionary(lots of globals)
deferredStartupActions: an OrderedCollection()
specialObjectsArray: an Array(nil false true
#Processor->Processor Bitmap Small...etc...
session: an Object
vm: a VirtualMachine
CurrentExecutionEnvironment class>>activate:for:
Receiver: CurrentExecutionEnvironment
Arguments and temporary variables:
anExecutionEnvironment: a DefaultExecutionEnvironment
aBlock: [ ^ SessionManager default snapshot: save
andQuit: quit ]
current: nil
Receiver's instance variables:
superclass: ProcessLocalVariable
methodDict: a
MethodDictionary(#default->CurrentExecutionEnvironment>>#default ...etc...
format: 65537
layout: a FixedLayout
instanceVariables: nil
organization: a ClassOrganization
subclasses: nil
name: #CurrentExecutionEnvironment
classPool: a Dictionary()
sharedPools: an OrderedCollection()
environment: a SystemDictionary(lots of globals)
category: #'Kernel-Processes'
traitComposition: {}
localSelectors: nil
soleInstance: a CurrentExecutionEnvironment
DefaultExecutionEnvironment(ExecutionEnvironment)>>beActiveDuring:
Receiver: a DefaultExecutionEnvironment
Arguments and temporary variables:
aBlock: [ ^ SessionManager default snapshot: save
andQuit: quit ]
Receiver's instance variables:
a DefaultExecutionEnvironment
DefaultExecutionEnvironment class>>beActiveDuring:
Receiver: DefaultExecutionEnvironment
Arguments and temporary variables:
aBlock: [ ^ SessionManager default snapshot: save
andQuit: quit ]
Receiver's instance variables:
superclass: ExecutionEnvironment
methodDict: a
MethodDictionary(#prepareForNewProcess:->DefaultExecutionEnvironm...etc...
format: 0
layout: a FixedLayout
instanceVariables: nil
organization: a ClassOrganization
subclasses: nil
name: #DefaultExecutionEnvironment
classPool: a Dictionary()
sharedPools: an OrderedCollection()
environment: a SystemDictionary(lots of globals)
category: #'Kernel-Processes'
traitComposition: {}
localSelectors: nil
instance: a DefaultExecutionEnvironment
SmalltalkImage>>snapshot:andQuit:
Receiver: Smalltalk
Arguments and temporary variables:
save: true
quit: false
Receiver's instance variables:
globals: a SystemDictionary(lots of globals)
deferredStartupActions: an OrderedCollection()
specialObjectsArray: an Array(nil false true
#Processor->Processor Bitmap Small...etc...
session: an Object
vm: a VirtualMachine
SmalltalkImage>>saveImageInFileNamed:
Receiver: Smalltalk
Arguments and temporary variables:
aFile: 'D:\Herby\Work\cinegames\towergame-backend\work.image'
imageFile: File @
D:\Herby\Work\cinegames\towergame-backend\work.image
Receiver's instance variables:
globals: a SystemDictionary(lots of globals)
deferredStartupActions: an OrderedCollection()
specialObjectsArray: an Array(nil false true
#Processor->Processor Bitmap Small...etc...
session: an Object
vm: a VirtualMachine
SmalltalkImage>>saveAs:
Receiver: Smalltalk
Arguments and temporary variables:
newNameWithoutSuffix: 'work'
Receiver's instance variables:
globals: a SystemDictionary(lots of globals)
deferredStartupActions: an OrderedCollection()
specialObjectsArray: an Array(nil false true
#Processor->Processor Bitmap Small...etc...
session: an Object
vm: a VirtualMachine
SaveCommandLineHandler>>saveImage
Receiver: a SaveCommandLineHandler
Arguments and temporary variables:
imageName: 'work'
oldImageFile: File @
D:\Herby\Work\cinegames\towergame-backend\base.image
oldChangesFile: File @
D:\Herby\Work\cinegames\towergame-backend\base.changes
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
SaveCommandLineHandler>>activate
Receiver: a SaveCommandLineHandler
Arguments and temporary variables:
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
SaveCommandLineHandler class(CommandLineHandler class)>>activateWith:
Receiver: SaveCommandLineHandler
Arguments and temporary variables:
aCommandLine: a CommandLineArguments
Receiver's instance variables:
superclass: CommandLineHandler
methodDict: a
MethodDictionary(#activate->SaveCommandLineHandler>>#activate #sa...etc...
format: 65540
layout: a FixedLayout
instanceVariables: nil
organization: a ClassOrganization
subclasses: nil
name: #SaveCommandLineHandler
classPool: a Dictionary()
sharedPools: an OrderedCollection()
environment: a SystemDictionary(lots of globals)
category: #'System-BasicCommandLineHandler'
traitComposition: {}
localSelectors: nil
[ aCommandLinehandler activateWith: commandLine ] in
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
Receiver: a PharoCommandLineHandler
Arguments and temporary variables:
aCommandLinehandler: SaveCommandLineHandler
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
BlockClosure>>on:do:
Receiver: [ aCommandLinehandler activateWith: commandLine ]
Arguments and temporary variables:
exception: Exit
handlerAction: [ :exit | ^ self handleExit: exit for:
aCommandLinehandler ]
Receiver's instance variables:
outerContext:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubComm...etc...
startpc: 34
numArgs: 0
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
Receiver: a PharoCommandLineHandler
Arguments and temporary variables:
aCommandLinehandler: SaveCommandLineHandler
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
Receiver: a PharoCommandLineHandler
Arguments and temporary variables:
handlers: an OrderedCollection(SaveCommandLineHandler)
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
Receiver: a PharoCommandLineHandler
Arguments and temporary variables:
aString: 'save'
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
[ self
handleArgument:
(self arguments
ifEmpty: [ '' ]
ifNotEmpty: [ :arguments | arguments first ]) ] in
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
Receiver: a PharoCommandLineHandler
Arguments and temporary variables:
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
BlockClosure>>on:do:
Receiver: [ self
handleArgument:
(self arguments
ifEmpty: [ '' ]
ifNotEmpty: [ :arguments |...etc...
Arguments and temporary variables:
exception: Exit
handlerAction: [ :exit | ^ self handleExit: exit ]
Receiver's instance variables:
outerContext:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
startpc: 49
numArgs: 0
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
Receiver: a PharoCommandLineHandler
Arguments and temporary variables:
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
PharoCommandLineHandler>>activate
Receiver: a PharoCommandLineHandler
Arguments and temporary variables:
Receiver's instance variables:
commandLine: a CommandLineArguments
session: a WorkingSession
stdout: a VTermOutputDriver
stderr: a VTermOutputDriver
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
Receiver: PharoCommandLineHandler
Arguments and temporary variables:
aCommandLine: a CommandLineArguments
Receiver's instance variables:
superclass: BasicCommandLineHandler
methodDict: a
MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
format: 65540
layout: a FixedLayout
instanceVariables: nil
organization: a ClassOrganization
subclasses: nil
name: #PharoCommandLineHandler
classPool: a Dictionary()
sharedPools: nil
environment: a SystemDictionary(lots of globals)
category: #'System-CommandLineHandler'
traitComposition: {}
localSelectors: nil
[ super activateWith: aCommandLine ] in PharoCommandLineHandler
class>>activateWith:
Receiver: PharoCommandLineHandler
Arguments and temporary variables:
aCommandLine: a CommandLineArguments
Receiver's instance variables:
superclass: BasicCommandLineHandler
methodDict: a
MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
format: 65540