5. Bug Fixes

Previous chapter

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

Symbol Garbage Collection not working reliably

The process that implemented the garbage collection of unreferenced Symbols could commit interior nodes of the SymbolDictionary structure such that many Symbols were not actually garbage collected. (#47891)

Statmonitor issues

Statmonitor automatic start failed with -X

Starting up a statmonitor -X using configuration parameters such as STN_STATMONITOR_ARGS did not work, as these methods automatically include the stone or cache name as an argument. The -X option provides host-only monitoring and no stone or cache name is permitted as an argument. The -X option is now handled, but note that there are limitations in the log file names permitted within the -F argument in this mode. (#47885)

Automatic start of statmonitor did not occur during pageaudit

Setting a value for STN_STATMONITOR_ARGS means that statmonitor should start automatically when the stone runs; this was not occurring during pageaudit. (#47674)

Missing localhost entry in /etc/hosts file not handled

The Stone failed to start with a missing entry for localhost in the machine host file /etc/hosts. Now, localhost is referenced internally by ::1 or 127.0.0.1 rather than relying on host translation. (#47202)

Host Memory Banner incorrect on the Mac

The amount of physical memory reported for the host of a GemStone process was not reported correctly on the Mac; the number provided was always 2048 MB. (#47905)

GsExternalSession Issues

Infinite recursion in GsExternalSession from GciError >> stack

GciError >> stack may have gone into infinite recursion if an external session gets an error during the stack operation. (#47656)

GsExternalSession failed with gemNRS: string argument

GsExternalSession login parameters can accept an instance of GsNetworkResourceString, or a String containing NRS as an argument. The use of strings for the gemNRS: parameter was broken. (#47868)

Logout problems in certain configurations

The tests to determine if Gem was correctly logged out did not take into account the possible existence of a stone with the same name running on the Gem host but not used to login the External session; nor a Gem running on a remote node. While the logout proceeded correctly, the return would not complete and the logout would appear to hang. (#47941, #47663)

Hot Standby issues

Logreceiver race condition could cause tranlog read failure

There is a race condition in logreceiver logic that can cause the slave stone to attempt to read from a newly transferred tranlog before any data has been permanently flushed to disk. This will generate errors claiming that the file is not a GemStone transaction log file. (#47844)

Logsender added padding to tranlog records when compressing

During compression, the logsender added padding to the tranlog records. This was unnecessary; and the cumulative padding could cause buffer overrun. (#47916)

NonTranloggedGlobals can cause tranlog restore to fail

Under certain sequences of operations, when using NonTranloggedGlobals and when the oopHighWaterMark is increasing, the oopHighWaterMark was not updated correctly. This did not cause the restoreFromLogs to fail, however, the stone could not subsequently start up. (#47679)

GsSysLog writeErrorMessage fails with ArgumentError

Execution of the method GsSysLog >> writeErrorMessage: failed with an Invalid priority ArgumentError. (#47878)

Incorrect error from before: and after: on out of range

When argument to SequentialCollection >> before: was the first element, or the argument to after: was the last element, the error incorrectly stated that the argument was not found in the collection. (#48072)

PositionableStreamPortable>>match: incorrect with legacy streams

Applications may install either Portable or Legacy stream hierarchies, which differ in the indexing of the start at 0 or 1. With legacy streams installed, which is the default for applications that originated earlier then v2.0, explicitly calling the PositionableStreamPortable>>match: would error. (#47285)

instVarAt:put: did not work for a class instance variables

Using instVarAt:put: to assign a class instance variables value reported an error. (#47430)

Issues related to Upgrade

After upgrade, GcGems not running

During the Stone restart during upgrade, the Reclaim and Admin GcGem/s were started, but could not login due to a version mismatch, and no further startup attempts were made after upgrade. This left the upgraded system without the GcGems running. (#47884)

Upgrade failed with "Attempt to modify invariant object"

The upgrade process attempted to add a dynamic instance variable #name to existing ObjectSecurityPolicies, for later use in displaying descriptive information about the security policy.

Upgrade’s removeallmethods incorrectly removed special-case methods

The upgrade process executes removeallmethods to ensure old methods that have been removed in the new version are removed. This execution of removeallmethods should only apply to persistent methods in environment 0, the standard GemStone Smalltalk environment. It was incorrectly removing methods in environments above 0, and removing session methods. Now, upgradeImage will not remove methods that have been installed in other environments. (#47821), or transient session methods (#46802)

Upgrade logging for PositionableStream handling

Upgrade logging output now includes more detailed information on the handling of the PositionableStreamLegacy vs. PositionableStreamPortable hierarchies.

NRS with gemnetobject did not handle spaces in pathnames

When using #dir: or #log: directives in the NRS that passed a gemnetobject into GemStone login parameters, the use of a directory name with spaces resulted in errors. Directory and file names with spaces are now supported. (#40211)

enableUnixAuthenticationWithAlias: failed in Unicode Mode

In a repository that has enabled Unicode Comparison Mode, the method UserProfile >> enableUnixAuthenticationWithAlias: fails with a primitive failure. (#47251)

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:

GsDigitalEnvelope >> decryptWithPrivateKey: withPublicVerificationKey:
GsNMethod >> _literalValToAssocations:
SortedCollection >> resortAll:
SymbolDictionary >> _listClassesIn:matching: 

Unnecessary warnings about log birth time

The Stone log may have included warnings of the following pattern, which were unnecessarily alarming. (#47686)

Warning, found a birth time mismatch, log to Repository.
log birth time = 1207767503, Repository birth time = 1530037449 

GsPackagePolicy test for session methods incomplete

The test to determine if a SessionMethod needed to be created was imprecise, which resulted in SessionMethods being created unnecessarily. (#47887)

Optimized code inconsistently handled step points and senders

When method code includes statements such as true ifFalse: aBlock, the statement can be optimized by excluding from the compiled executable method. The tools in the system that locates method sends and step points depends on the complied code. Previously, the optimization-out of such blocks was inconsistent, and the senders and step point information was correspondingly inconsistent. (#47985)

If you wish code to remain in the method and available to sendersOf and similar operations, do not use the true ifFalse: pattern.

Spurious errors on inter-gem signalling with Gem terminating

When a Gem is in the process of shutdown, inter-gem signalling could result in an unnecessary error being signalled. (#48016)

Previous chapter