The following bugs were present in v3.6.6 and are fixed in this version.
When the transaction logs are full, the Stone pauses to wait for space to become available. If a checkpoint starts while the Stone is waiting, it may have resulted in the Stone shutting down. (#49704)
Cache warming runs in transaction, and when performing a large amount of warming over a slower connection, it could result in a commit record backlog. Now, while still running in transaction, cache warming monitors the commit record backlog and aborts if necessary. (#48419)
During login, the session briefly locks the UserSecurityData for update. If the login process has problems and does not complete, so the UserSecurityData remains locked, further logins for that user may fail. (#49866)
When commits are suspended (as by Repository>>suspendCommitsForFailover), the SymbolGem cannot commit. If a symbol is created (e.g. by executing code), the SymbolGem errored and shutdown, and the Gem hung. (#50185)
The operations allReferences:, findAllReferences, and findReferences do not include references for an objects in a large IdentityBag (more than 2K elements). (#40163)
Restoring compressed tranlogs is unusably slow; the restore is doing excessive seeks due to a prematurely cleared buffer. This affects both gzip and lz4 compressed tranlogs. (#50692)
The inherited implementation was not appropriate for RcIdentityBag, so this method errored; an RcIdentityBag-specific method has been added. (#50588)
To configure Linux to allow huge pages, to protect critical processes from the Linux OOM killer, and to lock the shared page cache in memory, the Installation Guide directed using setcap to provide specific capabilities to GemStone executables. Setting these capabilities has the effect of preventing gdb from attaching to generate C stacks, and statmonitor from collecting certain host process statistics. (#50580).
Previously, allocation to extents was by free pages, not by extent size, which meant that in certain configurations the extents would not grow per the weights in DBF_ALLOCATION_MODE. (#49992)
When SHR_PAGE_CACHE_NUM_PROCS is default (-1), it computes a value based on STN_MAX_SESSIONS and other configuration parameters. This computation was incorrect, resulting in a value that was somewhat smaller than necessary, in the case where every slot was required. (#49458)
The primitives supporting the Float methods = and ~= return false, rather than failing the primitive, for SmallScaledDecimal arguments. This bypasses the handling that converts the SmallScaledDecimal to a comparable value. (#50597)
A SmallTime and a Time that represent equivalent points in time did not compare as equal using = (equal sign). (#50118)
Activating a passivated SmallDateAndTime in the approximate year range 2035 to 2072 errored; the activation expected a SmallScaledDecimal value in the internal storage, but the stored value was not in the SmallScaledDecimal range. (#50172)
For an empty String, this method incorrectly returned true. (#50145)
The NetLDI and gemnetobject and related scripts did not properly handle the case where the $GEMSTONE path included a symbolic link, and the target of the symbolic link changed while the NetLDI was running. The gemnetobject (and related scripts) used the current value of $GEMSTONE, rather than the argument from the NetLDI, which created an unclear state.
Now, if the resolved $GEMSTONE in the environment in which login is initiated does not match the $GEMSTONE path resolved when the NetLDI was started, login will fail with the message "expanded value of GEMSTONE environment variable changed" (#50173)
As a result, logins will also fail if the sys directory within the GemStone distribution is a symbolic link. This is not a supported configuration. The error reported to topaz on login is "socket read EOF"; the actual error message is in the gem log.
In-memory GC of a logged-in GsTsExternalSession caused a file handle leak (#50624)
On a clean stone shutdown using stopstone, stopstone exited with code 0. However, the stoned process itself exited with code 3. Now, stoned will exit with code 0 on clean stopstone. (#50222)
There are cases in which CByteArrays and CPointers that used by FFI can be committed, faulted out, and lose C data when faulted in. (#49769).
Recent releases include workarounds to avoid the subsequent Gem crash due to bug 49765; the underlying condition is fixed in v3.7.
Due to non-atomic updates in signal handling, it was possible for an InterSessionSignal to be lost or delayed, or other interrupt to be handled incorrectly; this might, for example, cause failure to respect a socket read or write timeout. (#49877)
To redirect both stdout and stderr to the same disk file, it did not work to individually specify the path for each. A new method has been added to support this use case: GsHostProcess >> redirectStderrToStdout. (#50445)
Due to an inappropriate use of _peek:, GsSignalingSocket >> acceptTimeoutMs: failed when the receiver was an instance of GsSecureSocket. (#50504)
The results produced by sending asJson were empty for instances of Date, Time, and DateAndTime. While DateTime produced a valid string, it was not quoted correctly. (#50391)
In v3.4, the BtreePlus indexes were introduced, and are used by default in new repositories. Upgraded repositories defaulted to legacy indexes. This behavior on upgrade was lost due to code reorganization in v3.6; upgrading from pre-3.4 to 3.6 or later would result in the default for GsIndexOptions to include btreePlusIndex, rather than legacyIndex. (#50318)
If a class was subclassed from nil, and doesNotUnderstand: was not implemented for that subclass, sending a message selector to an instance that was not understood resulted in infinite recursion. (#49768)
The Admin GcGem option #saveWriteSetUnionToFile, which is false by default, triggers the AdminGem to write a bitmap file containing the write set union. This file was not readable by hidden set nor by GsBitmap protocol. (#49730)
This method has been removed, to avoid a false impression of providing test coverage. This method supported returning true for two numeric arguments that are somewhat close, but not exactly equal. This resulted in failure to detect actual incorrect results. (#50159)
These methods are intended to signal a Warning to verify code when transitioning an application from 1-based to 0-based legacy streams (that is, not PostionableStreamPortable). Previously, these wrote a stack to the Stone; now, a Warning is signaled.