Common packaging problems
Packaging applications with logical process debugging
To enable debugging of walkbacks in images packaged directly, you must install SstErrorReporter manually. This is normally done automatically when loading SstDebuggingSupport. It is removed when packaging directly from an image, however.
To explicitly install the error reporter, execute the following expression before an error occurs:
SstErrorReporter install
Packaged image exits
Packaged images have the following cycle:
1. Do image startup.
2. Execute the startup code.
3. Exit image.
If possible, it's usually best to have your server application run in the starting process. But startup code commonly forks a new process to do the server processing. The starting process then resumes execution and exits the image.
The solution is to terminate the starting process after starting the server. This is done by setting the startup code as follows:
foo bar.
Processor activeProcess basicTerminate
Use basicTerminate with headless images (images without a UI). Using terminate causes another UIProcess to be started. This causes a walkback as it attempts to start the UI message loop, which will not have been packaged. For headed images you should use terminate.
SstUndefinedTransportError or SstUndefinedSchemeError
If SstUndefinedTransportError or SstUndefinedSchemeError errors occur in a walkback in your (directly) packaged image, it is likely that the source image has lost all of its configurations. You can re-register the configurations by running the loaded methods for the relevant SST applications.
The errors might also occur if your packaging instructions are not properly set up as described above.
'UndefinedObject does not understand resume'
You might get the UndefinedObject does not understand resume error when a packaged image starts, typically because the image was packaged with open sockets. SCI uses ACO which tries to terminate all outstanding futures on startup. The related resources are no longer valid and the image is in an inconsistent state.
There are two solutions:
1. Add a packaging rule to nil the default SciSocketManager.
aRuleCollector
initializeToNilClassVariable: #Default
inClassNamed: #SciSocketManager
2. Close all open sockets before packaging.
SciSocketManager default closeAllSockets
Last modified date: 04/20/2020