1. GemStone/S 64 Bit 3.3.9 Release Notes


GemStone/S 64 Bitâ„¢ 3.3.9 is a maintenance release of the GemStone/S 64 Bit object server. This release fixes a serious problem with filenames on Windows clients, as well as a number of other bug fixes and enhancements.

These release notes describe changes between the previous version of GemStone/S 64 Bit, version 3.3.8, and version 3.3.9. If you are upgrading from a version prior to 3.3.8, 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.3.5.

Supported Platforms

Platforms for Version 3.3.9

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

  • Solaris 10 and 11.3 on x86
  • AIX 6.1, 7.1, and 7.2
  • Red Hat Enterprise Linux Server 6.4, 6.9, 7.1, and 7.4;
    Ubuntu 14.04 and 16.04; and SUSE Linux Enterprise 12, all on x86
  • OS X 10.11.2 (El Capitan) with Darwin 15.2.0 kernel, and OS X 10.13.2 (High Sierra) with Darwin 17.3.0 kernel, on x86 (Mac is supported for development only)

Supported Windows client platforms are

  • Windows 7, Windows 2008 R2, Windows 8, and Windows 10

Note that (deprecated) Solaris/SPARC distributions are available for development and debugging only. Solaris on x86 continues to be fully supported.

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

GemBuilder for Smalltalk (GBS) Versions

The following versions of GBS are certified with GemStone/S 64 Bit version 3.3.9:

GBS version 8.3

VisualWorks 8.2.1


VisualWorks 8.2.1


VisualWorks 7.10.1


VisualWorks 7.10.1


  • Windows 10 and Windows 7
  • RedHat ES 6.9
    and 7.4, Ubuntu 14.04 and 16.04
  • Windows 10
  • RedHat ES 6.9
    and 7.4, Ubuntu 14.04 and 16.04
  • Windows 10 and Windows 7
  • RedHat ES 6.9
    and 7.4, Ubuntu 14.04 and 16.04
  • Windows 10
  • RedHat ES 6.9
    and 7.4
GBS version 8.2

VisualWorks 8.1.1

32-bit and 64-bit

VisualWorks 7.10.1


VisualWorks 7.10.1


  • Windows 10 and Windows 7
  • RedHat ES 6.9 and 7.4
  • Windows 7
  • RedHat ES 6.4, 6.9
    and 7.4, Ubuntu 14.04 and 16.04
  • Windows 7
  • RedHat ES 6.9
    and 7.4
GBS version 5.4.4

VA Smalltalk


  • Windows 10, Windows 8.1,
    Windows 2008 R2 and Windows 7

For more details on supported GBS and client Smalltalk platforms and requirements, see the GemBuilder for Smalltalk Installation Guide for that version of GBS. Consult the matrices on the website, gemtalksystems.com/products/gbs-vw or gemtalksystems.com/products/gbs-va, for the latest updates.

VSD version

The GemStone/S 64 Bit v3.3.9 distribution includes VSD version 5.4. The previous version of GemStone/S, v3.3.8, included VSD v5.3.1.

VSD version 5.4 includes many updates, new features and bug fixes. For details on the changes, see the Release Notes for VSD v5.4.

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

Distribution changes

32-bit VSD no longer included in the distribution

Only the 64-bit VSD executables will be provided; 32-bit VSD executables are deprecated and will no longer be included in the distribution.

copydbf reports version for backup file generated by any other version

While copydbf is intended to be used with dbf files of the same version as the executable, it is useful to use copydbf -i on a backup file generated from an unknown version of GemStone. Previously, this was possible only in some cases, in which the backup file header formats were compatible.

Now, copydbf knows all backup file header formats. Copydbf can be used with backups generated from all versions of GemStone (including 2.x, 3.1.x, 3.2.x, 3.3.x, and 3.4.x, as well as 32-bit GemStone/S 6.7.1), and will return the GemStone version number. Other copydbf functions are limited to compatible versions only.

Note that this applies to backup files only; extents and tranlogs are unaffected by this feature.

Added GCI functions


(ssize_t) GciNextUtf8Character(
    const char* src,
    size_t len,
    uint *chOut

For UTF-8 encoded src, return the next legal UTF-8 code point in *chOut. The function result is the number of bytes in the that code point, or -1 if the bytes are illegal for UTF-8. Can be called without a session. Does not generate GCI errors.


(BoolType) GciUtf8To8bit(
    const char* src,
    char *dest,
    ssize_t destSize

Convert Utf8 input in *src to 8 bit data in *dest. If all code points in *src are in the range 0..255, and the result fits in destSize-1, returns TRUE and *dest is null terminated, otherwise returns FALSE. Does not generate any GCI errors.

Windows client-side GsFile operations fail with non-ASCII filenames  

GsFile was not able to open a Windows client file with a name that contained characters outside the ASCII range, that is, with codePoints over 127. For such filenames, the open:* methods returned nil. (#47720).

The fix for this is largely transparent to the user; but there are a number of changes involved to support the correct behavior.

New class Utf16

The class Utf16 has been added. This is parallel to, and similar to, the existing Utf8 class.

An instance of Utf16 is a UTF-16 encoded string. For every codePoint cp in a Utf16 the following evaluates to true: cp >= 0 and: [cp <= 16r10FFFF]

Codepoints in a Utf16 use a variable number of bytes per codePoint, and thus only certain comparison methods, directly supported by the libicu libraries, are implemented. All other string manipulation must be done on the result of sending asUnicodeString to the instance of Utf16, and then operating on the equivalent Unicode7, Unicode16 or Unicode32 string.

Methods inherited from ByteArray operate on the raw bytes of the UTF-16 encoded string, and have no support for accessing codePoints.

Added methods

The following methods have been added:

String >> encodeAsUTF16

DoubleByteString >> encodeAsUTF16

QuadByteString >> encodeAsUTF16

GsFile >> gciClientIsWindows
Returns true if GCI client is on a Microsoft Windows operating system, false otherwise.

GsFile contents*OfDirectory:

The return values for GsFile contents*OfDirectory:, for file and directory names that included Characters with codePoints over 127, were not handled in user-friendly way in either Traditional or Unicode comparison mode. (#47325)

Traditional string comparison mode

In this mode, the resulting filenames were instances of String encoded as UTF-8. Before using, the result String had to be decoded using decodeFromUTF8. Now, in this mode, the contents*OfDirectory: methods return instances of String, DoubleByteString, or QuadByteString.

Unicode comparison mode

In this mode, the resulting filenames were instances of Utf8. For some usages, this had to be decoded using asUnicodeString. Now, in this mode, the contents*OfDirectory: methods return instances of Unicode7, Unicode16, or Unicode32.

Errors on bitmap filenames that are not String or Unicode7

The code to write or read bitmap (.bm) files did not handle UTF-8, and DoubleByteStrings or Unicode strings outside the Unicode7 range reported primitive failures or argument errors. (#47395)

reclaim configuration parameters revert to speed-optimized values

Values for the ReclaimGem parameters:


Are reset following reclaimAll, MFC, or Epoch, to speed-optimized values, and the previous settings are not automatically restored. (#47797)

In version 3.3 and later, the values in the GcUser’s UserGlobals are used at startup only; runtime changes to these values are done using methods in System class.

Gem crash with very large GEM_MAX_SMALLTALK_STACK_DEPTH on Linux or Solaris/x86

When GEM_MAX_SMALLTALK_STACK_DEPTH is very large (over 35000) then an AlmostOutOfStack signal may result in a Gem SEGV, for Gems running on x86_64 processors. Now, this configuration is automatically limited to no more than 35000 on these platforms. (#47753)

WriteSet issues with nested transactions

When a nested transaction is started, the writeSet could be overstated, including objects that were not modified by the outer transaction. This persisted through the commit of the nested transaction. Also, attempts to modify an invariant object may have put the invariant object in the write set before signalling the Error that modification was not allowed.(#47799)

Stone checkpoint state not updated quickly when checkpoint work done

During a checkpoint, the Stone waits for the AIO page servers to complete the actual work involved in the checkpoint. The Stone was not checking often enough that the checkpoint work is done, resulting in a checkpoint appearing to take a minimum of 10 seconds to complete. (#47769)

Problems with copydbf -i on files on NFS-mounted disks

With a .dbf file on an NFS-mounted disks, copydbf -i could return an error or report no results, although the file itself is valid. (#47732)

Integer printing broken on Windows client 64-bit topaz

GemStone provides both 64 bit and 32 bit topaz executables with the Windows client. In 64-bit topaz, printing of Integers is incorrect. (#47733)

Upgrade created new version of TimeZone class

Running the image upgrade causes a new version of the TimeZone class to be unnecessarily created. (#47727)

GemStone internal UndefinedObjects not handled correctly by display

In addition to the nil and remoteNil instances of UndefinedObject, GemStone internally produces several other kinds of UndefinedObject, which normally would only be visible when examining GsProcess stacks. These did not respond to asString correctly. (#47758)

Class definition issues

Setting class category to nil does not work correctly

GemStone classes have a category instance variable. This can be set to a String or be nil; however, setting it to nil resulted in a category of the string ’nil’, rather than nil. (#47788)

Subclass creation using byteSubclass:* did not tolerate nil SymbolDictionary

Classes may be created and not put into a specific SymbolDictionary by passing in a nil for the inDictionary: argument. The subclass creation methods subclass:... and indexableSubclass:... allowed this, but byteSubclass:... generated an error. (#47403)

Error on versioning a class that with a nil inDictionary: argument

If a class is defined using subclass creation protocol with the inDictionary: argument of nil, and the class creation is as a version of an existing class, it raiseed an error. (#47413)

Indexing Issues

Incorrect results for BtreePlus indexed range query

When using the new indexing infrastructure, the BtreePlus index, and making a range query of the form a <= value <= b, the incorrect comparison operator was being applied for one of the two logical comparisons. This resulted in incorrect results. (#47509)

Performance improvement in creating equality index

Setting pathTerm state when creating a new index invoked allSubclasses, which resulted in unnecessary performance overhead. (#47779)