1. Release Notes for GemBuilder for Smalltalk 8.6

GemBuilderfor Smalltalk (GBS) version 8.6 is a new version of the GemBuilder for Smalltalk product, including official support for the latest VisualWorks version and fixing a number of bugs. Please take time to read through these release notes before installing or upgrading, to acquaint yourself with the changes.

These release notes provide changes between the previous version of GBS, version 8.5, and version 8.6. If you are upgrading from a version prior to 8.5, please also review the release notes for each intermediate release between your version and 8.6, to see the full set of changes.

This release supports GemStone/S 64 Bit only, with VisualWorks 9.1.1. GBS 8.6 does not support 32-bit GemStone/S, nor VA Smalltalk.

To install GemBuilder for Smalltalk 8.6, follow the instructions in the GemBuilder for Smalltalk Installation Guide for version 8.6.

Supported Platforms and Versions

The following tables describe the client Smalltalk versions and platforms supported by GBS 8.6, and the GemStone server product shared library versions that can be used with each.

For more details, including the specific required client libraries for each server product and versions, refer to the GemBuilder for Smalltalk Installation Guide for version 8.6.

Table 1  Supported GemStone/S 64 Bit Server versions


VW 9.1.1

VW 9.1.1
64 bit

Windows 10

3.6.3, 3.5.8

3.6.3, 3.5.8

Ubuntu Linux 20.04

3.6.3, 3.5.8

3.6.3, 3.5.8

Ubuntu Linux 18.04

3.6.3, 3.5.8

3.6.3, 3.5.8

Red Hat Linux ES 8.5

3.6.3, 3.5.8

3.6.3, 3.5.8

Red Hat Linux ES 7.9

3.6.3, 3.5.8

3.6.3, 3.5.8

Changes and New Features

The following changes are in version 8.6:

Added support for VW 9.1.1

GBS 8.6 includes support for the VW 9.1.1.

Due to changes in how method overrides are applied, v8.6 is not expected to be loadable into other VW versions.

VisualWorks methods overrides load changes

GBS includes overrides to some VW base methods, to allow transparent operations and debugging on server objects as well as client objects. The way these methods are distributed and loaded has been modified. (#49865)

Change of behavior in memory based call tracing

When you are doing GCI call tracing in memory, using stopCallTracing would delete the results, so if called prior to writeToFile, the tracing information was lost.

Now, invoking stopCallTracing automatically writes the result to a disk file.

GbxTestingFetchTraversal no longer in distribution.

The class GbxTestingFetchTraversal is only intended for use by GemTalk internal testing framework, and is no longer distributed.

Settings dialog changes in display

The displayed settings under the Settings Window heading for GemStone has been changed. Previously, a section titled Unapplied Settings incorrectly included applied settings.

Bugs Fixed

The following bugs have been fixed in version 8.6:

Class Connectors did not use dictionaryName to resolve Class

A class connector has an instance variable dictionaryName that is intended to specify the specific server SymbolDictionary in which to find a Class with the specified name. If the class name appeared in multiple SymbolDictionaries referring to multiple distinct Classes, the dictionaryName was not used to determine the correct Class instance; the normal GemStone lookup based on SymbolList order was used. (#49459)

Note that now, if the class connector specifies a dictionary name and that dictionary does not have a key of the specified class name, it will result in a error; previously this would locate the class in whatever SymbolDictionary it was in.

Inspector issues with dynamic instance variables

Error on inspecting object with dynamic instance variables containing unreplicateable objects

When inspecting a server object with dynamic instance variables, a "Block replication failed" error resulted if a dynamic instance variable contained an unreplicateable object. (#49537)

Assignments to dynamic instance variables were not properly synchronized

Access to server dynamic instance variables was done using unsynchronizedEvaluateBlock; this should be done using synchronized executes.(#49542)

Finding references to class instance variable

The Find > References to... menu item allows search for Class Variables, but not Class Instance Variables. In some earlier releases, the menu item Class > Browse References > to a class instance variable existed; this menu option was inadvertently removed, and has been restored. (#46623)

Use of deprecated server methods

GBS code makes a number of calls to server methods; this included to deprecated methods. As a result, GBS was not entirely usable when server deprecation errors were enabled. This has been addressed, with the exception of some inter-session signalling methods. (#42532)

Method > Browse on class method in Debugger did not allow instance browsing

Using the Debugger menu item Method > Browse opens a Hierarchy Browser on that method. This browser includes both class and instance tabs; if the browser was opened on a class method, however, it would not display instance methods. (#49671)

Handling of removed methods

When one or more methods are removed, open browsers on that method in the current and/or other logged-in sessions were not always updated correctly, and some subsequent operations could result in walkbacks. (#43043)

Error during flush to server could hang debugger

Objects are flushed to the server when holding a semaphore. If an error occurs, such as the object flushed to the server cannot be replicated, a debugger is opened in GBS but was not populated since key information was not available while the semaphore was held for the flush itself. (#49635)

Login failure display of error text did not include details

The GbsError that occurs on server login error displayed the error without any details. Now, the error information reported from the server is displayed. (#49137)

autoSave method rename and code cleanup

The method GbxBrowser >> autoSave has been renamed to isAutoSaveEnabled, and other code cleanup has been done to avoid the risk of inadvertently retaining references to sessions that had logged out. (#49333)

Timing hole near midnight affecting critical blocks

A Time comparison code produced an invalid compare with 500ms of midnight, and could hang. (#49469). Affected methods are:


Breakpoints in unbound methods problematic

Breakpoints in server unbound methods (such as GS-Do It executions) caused walkbacks and errors. There is no easy way to set a breakpoint in an unbound method using the browsers; it can be done by code execution. (#49682).

unsynchronizedPerformOnGsServer:withArgs: did not replicate correctly

The method unsynchronizedPerformOnGsServer:withArgs: should replicate the full transitive closure of the result of the message send. Instead, it was only replicating to the session's configured replication level. It also failed to log to the GBS trace log. (#49538)