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