GBS inspectors use evaluate instead of execute when displaying server objects that included dynamnic instance variables. If the value of the dynamic instance variable has unreplicateable objects, then this resulted in an error "Block replication failed"
Replace the methods GbxBasicInspector>>dynamicInstVarFields and GbsSession >> unsynchronizedExecuteBlock:withArguments:context: with the following:
GbxBasicInspector >> dynamicInstVarFields
GbxServerVersion current atLeast64v3 ifFalse: [^Array new].
[| dynamicInstVars |
dynamicInstVars := OrderedCollection new.
self object delegate session
sessionCritical:
[(self object delegate
unsynchronizedPerformOnGsServer: #dynamicInstanceVariables) do:
[:varName |
| attr instVarDelegate |
attr := GbxDynamicInstVarAttribute
label: #varName << #gbs >> (‘dynamic: ’ , varName asString)
value: (instVarDelegate := self object delegate session
unsynchronizedExecuteBlock: ‘[:obj :var | obj dynamicInstVarAt: var]'
withArguments: (Array with: self object delegate with: varName)
context: nil)
printString: (self remotePrintStringFor: instVarDelegate)
object: self object.
dynamicInstVars add: attr]]
unlessBlocked: [^OrderedCollection new]
retryFor: 500.
^dynamicInstVars asArray]
on: Core.MessageNotUnderstood
do: [:ex | ^Core.Array with: ‘error getting dynamic inst vars’]
GbsSession >> unsynchronizedExecuteBlock: sourceString withArguments: args context: contextDelegate
"Private to GBS. Does not synchronize server and client object spaces, so safe
only in specific internal GBS operations.
Immune from debugger stepping and asynchronous events."
| evaluation |
self gbsMessenger
statusTag: #unsynchronizedEvaluateBlock
message: '(s%1) GbsSession>>unsynchronizedExecuteBlock: %2 withArguments: %3 context: %4'
with: self sessionId
with: sourceString
with: args
with: contextDelegate.
evaluation := self newServerEvaluation.
^evaluation
arguments: args;
sourceCode: sourceString;
contextDelegate: (self delegateForUnsynchronizedContext: contextDelegate);
isBlock: true;
shouldSynchronize: false;
shouldReplicateResult: false;
replicationScheme: GbxNullReplicationScheme new;
stopForBreakpoints: false;
execute
Last updated: 5/20/21