
If you were logged in you would be able to see more operations.
|
|
|
Environment:
|
MacOS X 10.9, development build of Firebird
|
|
QA Status: |
Cannot be tested
|
LibreOffice embeds FireBird, telling it to use a subdirectory of the LibreOffice tempdir for the firebird lockdir.
At process shutdown, ~Cleanup from file init.cpp is called, which calls this stack:
allClean()
Firebird::InstanceControl::destructors()
Firebird::InstanceControl::InstanceList::destructors()
Firebird::InstanceControl::InstanceLink<jrd::StorageInstance, ...>::dtor
jrd::StorageInstance::dtor
~ConfigStorage
ISC_remove_map_file(sh_mem const*)
ISC_remove_map_file(char const*)
gds_prefix_lock
os_utils::createLockDirectory(char cont*)
However, the LibreOffice temporary directory, which is the parent of the firebird lockdir, has been deleted by then, which causes the mkdir() to fail, throwing an exception that eventually causes (in development build) firebird to call abort().
So we changed LibreOffice to call fb_shutdown(0, 1) when it does not need firebird anymore, expecting that then ~Cleanup would not be called, or become a noop or ... We checked that fb_shutdown is actually called, and returns success. However, ~Cleanup still tries to do work, for that to create a lockdir, which fails and abort().
Please make fb_shutdown() make all the cleanups so that nothing is done at process exit() time anymore.
|
Description
|
LibreOffice embeds FireBird, telling it to use a subdirectory of the LibreOffice tempdir for the firebird lockdir.
At process shutdown, ~Cleanup from file init.cpp is called, which calls this stack:
allClean()
Firebird::InstanceControl::destructors()
Firebird::InstanceControl::InstanceList::destructors()
Firebird::InstanceControl::InstanceLink<jrd::StorageInstance, ...>::dtor
jrd::StorageInstance::dtor
~ConfigStorage
ISC_remove_map_file(sh_mem const*)
ISC_remove_map_file(char const*)
gds_prefix_lock
os_utils::createLockDirectory(char cont*)
However, the LibreOffice temporary directory, which is the parent of the firebird lockdir, has been deleted by then, which causes the mkdir() to fail, throwing an exception that eventually causes (in development build) firebird to call abort().
So we changed LibreOffice to call fb_shutdown(0, 1) when it does not need firebird anymore, expecting that then ~Cleanup would not be called, or become a noop or ... We checked that fb_shutdown is actually called, and returns success. However, ~Cleanup still tries to do work, for that to create a lockdir, which fails and abort().
Please make fb_shutdown() make all the cleanups so that nothing is done at process exit() time anymore. |
Show » |
|
I do not have access to Mac and therefore to test the fix compiled it on linux using set of system calls used/present on Mac. Everything looks fine but if you have any problems on real build - feel free to contact.