1. GemStone/S 64 Bit 3.4.5 Release Notes


GemStone/S 64 Bitâ„¢ 3.4.5 is a maintenance release of the GemStone/S 64 Bit object server. This release includes several feature enhancements and fixes a number of bugs.

We recommend everyone using GemStone/S 64 Bit upgrade to the latest version, currently v3.5.1. The v3.4.5 release provides bug fixes and enhancements to customers who are not yet able to upgrade to v3.5.1 or later.

These release notes describe changes between the previous version of GemStone/S 64 Bit, version 3.4.4, and version 3.4.5. If you are upgrading from a version prior to 3.4.4, review the release notes for each intermediate release to see the full set of changes.

The Installation Guide has not been updated for this release. For installation, upgrade and conversion instructions, use the Installation Guide for version 3.4.

Supported Platforms

Platforms for Version 3.4.5

GemStone/S 64 Bit version 3.4.5 is supported on the following platforms:

  • Red Hat Enterprise Linux Server 6.9 and 7.4, and
    Ubuntu 16.04 and 18.04, and SUSE Linux Enterprise 12, on x86.
    Testing has been done on some earlier Red Hat Enterprise Linux Server 6.x and 7.x versions with the latest security patches.
  • Solaris 10 and 11.4 on x86
  • AIX 6.1, 7.1, and 7.2
  • OS X 10.14.3 (Mojave) with Darwin 18.2.0 kernel, on x86
    (Mac is supported for development only)

For more information and detailed requirements for each supported platforms, please refer to the GemStone/S 64 Bit v3.4 Installation Guide for that platform.

GemBuilder for Smalltalk (GBS) Versions

GemStone/S 64 Bit version 3.4.5 requires GBS version 8.3 or later for VisualWorks Smalltalk, or version 5.4.4 or later for VA Smalltalk.

The following versions of GBS are supported with GemStone/S 64 Bit version 3.4.5:

GBS version 8.4


32-bit and 64-bit





  • Windows 10 and Windows 7
  • RedHat ES 7.4 and 6.9; Ubuntu 18.04 and 16.04
  • Windows 10 and Windows 7
  • RedHat ES 7.4 and 6.9; Ubuntu 16.04
  • Windows 10
  • RedHat ES 7.4 and 6.9
GBS version 8.3


32-bit and 64-bit





  • Windows 10 and Windows 7
  • RedHat ES 7.4 and 6.9; Ubuntu 16.04
  • Windows 10 and Windows 7
  • RedHat ES 7.4 and 6.9; Ubuntu 16.04
  • Windows 10
  • RedHat ES 7.4 and 6.9
GBS version 5.4.5

VA Smalltalk

VA Smalltalk

  • Windows 10
  • Windows 10
  • Windows 7, Professional or above
GBS version 5.4.4

VA Smalltalk

  • Windows 10
  • Windows 8.1, Professional or above
  • Windows 7, Professional or above

Note that Windows 7 reached end of life as of January of 2020. While GemTalk will continue to support GemStone clients on Windows 7, it will no longer be considered certified.

For more details on supported GBS and client Smalltalk platforms and requirements, see the GemBuilder for Smalltalk Installation Guide for that version of GBS.

VSD Version

The GemStone/S 64 Bit v3.4.5 distribution includes VSD version 5.4.2. The previous version of GemStone/S, v3.4.4, included VSD v5.4. (VSD v5.4.1 was a limited distribution release; all changes are included in v5.4.2).

VSD version 5.4.2 is a maintenance release, including a few bug fixes. For details on the changes, see the Release Notes for VSD v5.4.2.

VSD versions are not tied to GemStone server versions: both older and newer versions of VSD can be used to read statmonitor files generated by both older and newer versions of GemStone/S and GemStone/S 64 Bit.

Changes in this release

Updated library versions

  • The version of OpenSSL has been updated to 1.1.1d.
  • The version of lz4 has been updated to v1.9.2

Recommendation to clear /opt/gemstone/locks/ on system restart

If there is an unexpected shutdown, the lock files (filename..LCK) for GemStone processes such as Stone and cache remain in the /opt/gemstone/locks/ directory. These lock files include the PID and other information that is used to determine process status.

On restart, it is possible for kernel processes to reuse this PID. If the owner is root, GemStone cannot reliably determine the status of the process and thus cannot safely delete the lock file. These lock files must be manually deleted.

It is recommended that systems should be setup so that on boot, the lock files in /opt/gemstone/locks/*.LCK are deleted automatically on system restart.

Do not delete /opt/gemstone/locks/gemstone.hostid, which is in the same directory.

Reporting on transaction conflicts

The following methods have also been added, providing the important details of commit conflict in a readable string. Each line includes the conflict kind and the conflict objects.

System class >> conflictReportString
Return a String summarizing the results of System class >> transactionConflicts.

System class >> conflictReportString: conflicts
The conflicts argument is Array returned by System class >> transactionConflicts. The report is limited to the first 100 oops in each category of conflict.

For example,

topaz 1> run
System conflictReportString
1 Write-Write Conflicts( 10528769(a SymbolDictionary))

Ability to terminate a GsHostProcess

The following methods have been added to programmatically terminate a running GsHostProcess:

GsHostProcess >> killChild
Terminate a GsHostProcess process that is running.

GsHostProcess >> killChild: timeout
Wait for the specified timeout and if the GsHostProcess child process is still running, terminate it.

gslist output in json format

gslist has added the -j argument, which returns information about running GemStone processes comparable to the gslist -x output, in json format.

For example:

unix> gslist -j -n gs64stone
	"Pid": 29010,
	"Port": 35043,

This can be easily processed as needed for system administration. For example:

(JsonParser new parse: (System performOnServer: 'gslist -j')

creates a structure of Dictionaries and Arrays in GemStone Smalltalk containing all information about all GemStone services.

Note that all keys and values in the output are capitalized. This includes gslist status values (such as ’Exists’), and command line arguments.

copydbf -i/-I of extent file now includes version

A line has been added to the copydbf -i/-I output for an extent file, providing the version number of the extent.

Further details for failures in network handshake

Errors in the NetSAccept/NetSConnect handshake can now be configured to print additional diagnostic information.

To enable detailed printing of socket failures during login, set the environment variable:


before startnetldi. For GCI clients with a console, it is recommended that this also be set in that environment before starting the client.

Bug Fixes

The following bugs that were present in v3.4.4 are fixed in this version.

Performance issue

The AIO pgsvr made several calls to HostGetNanoTime() within its loop. These calls put load on the CPU and impacted performance. (#48503)

Reduced-conflict objects not handled correctly in nested transactions

Reduced Conflict (RC) objects (such as RcKeyValueDictionary, etc.) maintain changes in a redo log that allows a commit conflict to be resolved by replay. However, when an RC object was modified within a nested transaction, and that nested transaction was aborted, the redo log was not updated. If later, the RC object has further changes, and the commit again has conflicts such that the redo log is replayed, the changes that had been made earlier and aborted may be applied. (#48389)

Terminated GsProcess may not have allowed ensure block to complete

When sending terminate to a GsProcess that is executing an ensure block, there is a risk that the timeout may expire before the ensure block completes.

The timeout in GsProcess>>terminate has been raised from 10 to 30 seconds to reduce the risk of this problem. (#48271)

GCI client on Windows 7 hang on socket disconnect

A GCI client (including RPC GBS and topaz) on Windows 7 may hang when a socket is killed and the Gem exits. This is related to that OS version’s socket library returning EWOULDBLOCK, which otherwise implies data on the socket. The GCI client code now recognizes this condition and will terminate the connection. (#48448)

Removing dynamic instance variable from large SequenceableCollection

Removing a dynamic instance variable from an instance of a subclass of SequenceableCollection (such as Array, OrderedCollection, or String), that is a Large object (that is, a pointer size larger than 2K or a byte size larger than 16K), causes the size to become incorrectly very large. (#48506)

Stuck hash table lock in remote cache

It was possible for an attempt to remove an old lifetime of a page in a remote cache to result in a stuck hash table lock. (#48453)

Find reference path search missed references via class instance variables

If the only reference to an object was via a class instance variable, and the class itself was not in any user’s SymbolDictionaries, the object could be incorrectly reported as unreachable/dead. (#48447)

Hot standby issues

Adjustments to debug logging output

The hotstandby processes, logreceiver and logsender, print some information to their log files. Starting in v3.4.2, to reduce clutter in the logs, some of these output statements are only printed when debugging is enabled. Debugging is enabled using the startlogreceiver/startlogsender utility argument -d. Some log messages now printed only in debug mode were still prefixed with [Info]. In addition, flush records are printed to the log in regular as well as debug mode. (#48484)

continuousRestoreFromArchiveLogs could fail on initial setup

When setting up a new a hot standby system, the final steps are to run startlogreceiver, and then to execute continuousRestoreFromArchiveLogs: on the slave system. However, it takes a few seconds after executing startlogreceiver before the tranlogs are available on the slave system. If continuousRestoreFromArchiveLogs: is executed immediately after the startlogreceiver is started up, before any logs were available, it failed with a file not found error. (#48346)

GsBitmap issues

GsBitmap did not correctly handle some cases with large objects

Some GsBitmap methods to find references did not correctly handle cases of references through NSCs or LargeObjectNode, and errored. Specifically, finding references paths using GsSingleRefPathFinder could error. (#48445)

Printing a very large GsBitmap

GsBitmap >> printOn: did not limit the amount printed. For very large GsBitmaps, the print operation failed. (#48443)

DecimalFloat >> asStringUsingFormat: did not 0-pad per argument

The arguments to asStringUsingFormat: include the number of digits to include following the decimal point. While DecimalFloat rounded if there were more digits, it did not pad with 0 as documented to the minimum number of digits. (#48305)

GciNewUtf8String does not put result object in export set

The GCI function GciNewUtf8String() did not put the newly created object in the export set, which allowed it to be garbage collected while still in use. (#48217)

XFS file system errors for 32-bit processes

Some GemStone operations could error when run within 32-bit processes (such as 32-bit topaz RPC, or a 32-bit GCI application), on 64-bit XFS file system. Specifically, GsFile client file directory operations from 32-bit client processes for 32-bit client processes resulted in EOVERFLOW. (#48462)

Issues affecting systems upgraded from early versions of GemStone

Repository scan errors on upgraded repositories

For a repository that originated in an early version of GemStone, and had fewer than 19 GsObjectSecurityPolicies (previously Segments), repository scan operations failed in v3.4 and later. (#48276)

objectAudit warnings on old 32-bit fanout in upgraded repositories

Repositories that were converted from 32-bit Gemstone/S and did not run postconv during that conversion, may have the older internal collection tree fanout. This is reported as a warning by objectAudit. This warning did not respect the topaz push command, and was only visible in the console, and thus was not always found. (#48277)

Current user SymbolList used instead of session SymbolList

As described in the Programming Guide, the transient and persistent SymbolLists have different functions. Several methods referred to the current User’s SymbolList, where they should refer to the session SymbolList. (#48050)

The following methods have been updated:

GsNMethod >> _literalValToAssocations:
SortedCollection >> resortAll:hiddenSetForErrors:

become: crashed with extremely large NSC

Sending become: to a million-item UnorderedCollection (Non-sequential collection), such as IdentityBag, could have crashed the Gem with a SEGV. (#48294)

RcKeyValueDictionary hard coded references to RcCollisionBucket

It is allowed to create customized collision buckets for a subclass of RcKeyValueDictionary; however, there were hardcoded references directly to RcCollisionBucket. These have been changed to invoke _bucketClass. (#48390)