Bug 44700

GemBuilder for Smalltalk/VW

7.6.1, 7.6, 7.5, 7.4.1, 7.4

All

8.1, 8.0

Failed to find or generate a server class for client class or metaclass Metaclass

GBS logins can sometimes fail with a GbsClassGenerationError, reported as "Failed to find or generate a server class for client class or metaclass Metaclass".

The defect is exposed when growing the 'server map' during a server interaction. If VisualWorks runs a garbage collection after the server map is resized but before the server interaction finishes, the delegates, and their client object mappings, that were added to the extended portion of the server map will also be garbage collected.

The server map associates client objects with the corresponding delegate to the server object. It is initialized with a capacity of 2^30 (one billion) objects.

When GBS adds a delegate for an object whose oop is greater than its current capacity, GBS has to grow the server map. The new server map is created as holding weak references, and the added content of this map, holding the new delegate, is also set up with weak references.

During a server interaction, the server map is set to hold strong references, in order to hold the graph of returned objects. Because the new portion of the server map is weak, a garbage collection at the wrong time can remove the newly mapped delegates, triggering this error while trying to re-fetch the results of the interaction.

Workaround

Download and install the following patch:

<a href="http://downloads.gemtalksystems.com/pub/patches/Gbs7.6.1-Patch44700.st">Gbs7.6.1-Patch44700.st</a>

Last updated: 11/29/14