dbaccess::ODatabaseContext cleaning its cache "too late"?

Stephan Bergmann sbergman at redhat.com
Fri Aug 16 05:55:35 PDT 2013


Happened to notice on current master that "File - New - Database - 
Select database - Create a new database - Embedded Database: HSQLDB 
Embedded - Finish - Save - Use Wizard to Create Table... - Cancel - File 
- Exit LibreOffice" leads to

> warn:legacy.osl:28758:1:dbaccess/source/core/dataaccess/ModelImpl.cxx:910: caught an exception!
> in function:static bool dbaccess::ODatabaseModelImpl::commitStorageIfWriteable_ignoreErrors(const com::sun::star::uno::Reference<com::sun::star::embed::XStorage>&)
> type: com.sun.star.uno.DeploymentException
> message: component context fails to supply service com.sun.star.io.TempFile of type com.sun.star.io.XTempFile
> context: N4cppu16ComponentContextE
>
> warn:legacy.osl:28758:1:dbaccess/source/core/dataaccess/ModelImpl.cxx:819: ODatabaseModelImpl::commitRootStorage: could commit the storage!

because at

> #2  0x00007f2a502dca12 in dbaccess::ODatabaseModelImpl::commitStorageIfWriteable_ignoreErrors (_rxStorage=uno::Reference to (OStorage *) 0x7f2a5002f348) at lo/core/dbaccess/source/core/dataaccess/ModelImpl.cxx:910
> #3  0x00007f2a502dc33a in dbaccess::ODatabaseModelImpl::commitRootStorage (this=0x17de510) at lo/core/dbaccess/source/core/dataaccess/ModelImpl.cxx:817
> #4  0x00007f2a502db8d4 in dbaccess::ODatabaseModelImpl::dispose (this=0x17de510) at lo/core/dbaccess/source/core/dataaccess/ModelImpl.cxx:730
> #5  0x00007f2a5025dd1b in dbaccess::ODatabaseContext::disposing (this=0x7f2a50d4b7a8) at lo/core/dbaccess/source/core/dataaccess/databasecontext.cxx:288
> #6  0x00007f2a7700aad8 in cppu::WeakComponentImplHelperBase::dispose (this=0x7f2a50d4b7a8) at lo/core/cppuhelper/source/implbase.cxx:268
> #7  0x00007f2a5026c9ba in cppu::WeakComponentImplHelper3<com::sun::star::lang::XServiceInfo, com::sun::star::sdb::XDatabaseContext, com::sun::star::lang::XUnoTunnel>::dispose (this=0x7f2a50d4b7a8) at lo/core/include/cppuhelper/compbase3.hxx:66
> #8  0x00007f2a76ffdee4 in cppu::OFactoryComponentHelper::dispose (this=0x7f2a510ade08) at lo/core/cppuhelper/source/factory.cxx:471
> #9  0x00007f2a76ff1cc4 in cppu::OComponentHelper::release (this=0x7f2a510ade08) at lo/core/cppuhelper/source/component.cxx:91
> #10 0x00007f2a77007a1c in cppu::OFactoryComponentHelper::release (this=0x7f2a510ade08) at lo/core/cppuhelper/source/factory.cxx:292
> #11 0x00007f2a76fecde3 in com::sun::star::uno::Reference<com::sun::star::lang::XSingleComponentFactory>::~Reference (this=0xb75330, __in_chrg=<optimized out>) at lo/core/include/com/sun/star/uno/Reference.hxx:106
> #12 0x00007f2a77072d8b in cppuhelper::ServiceManager::Data::Implementation::~Implementation (this=0xb75320, __in_chrg=<optimized out>) at lo/core/cppuhelper/source/servicemanager.hxx:79
> #13 0x00007f2a77072de4 in boost::checked_delete<cppuhelper::ServiceManager::Data::Implementation> (x=0xb75320) at lo/core/workdir/unxlngx6/UnpackedTarball/boost/boost/checked_delete.hpp:34
> #14 0x00007f2a770776e4 in boost::detail::sp_counted_impl_p<cppuhelper::ServiceManager::Data::Implementation>::dispose (this=0xb75430) at lo/core/workdir/unxlngx6/UnpackedTarball/boost/boost/smart_ptr/detail/sp_counted_impl.hpp:78
> #15 0x00007f2a76ff5404 in boost::detail::sp_counted_base::release (this=0xb75430) at lo/core/workdir/unxlngx6/UnpackedTarball/boost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:146
> #16 0x00007f2a76ff547d in boost::detail::shared_count::~shared_count (this=0xb75480, __in_chrg=<optimized out>) at lo/core/workdir/unxlngx6/UnpackedTarball/boost/boost/smart_ptr/detail/shared_count.hpp:371
> #17 0x00007f2a76ffa590 in boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation>::~shared_ptr (this=0xb75478, __in_chrg=<optimized out>) at lo/core/workdir/unxlngx6/UnpackedTarball/boost/boost/smart_ptr/shared_ptr.hpp:328
> #18 0x00007f2a76ffa5af in std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> >::~pair (this=0xb75470, __in_chrg=<optimized out>) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_pair.h:88
> #19 0x00007f2a76ffa5fa in std::_Rb_tree_node<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > >::~_Rb_tree_node (this=0xb75450, __in_chrg=<optimized out>) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:130
> #20 0x00007f2a76ffa618 in __gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::destroy<std::_Rb_tree_node<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > > (this=0x7fffe1f06e20, __p=0xb75450) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/new_allocator.h:114
> #21 0x00007f2a76ff9f07 in std::_Rb_tree<rtl::OUString, std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> >, std::_Select1st<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > >, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::_M_destroy_node (this=0x7fffe1f06e20, __p=0xb75450) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:419
> #22 0x00007f2a76ff985f in std::_Rb_tree<rtl::OUString, std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> >, std::_Select1st<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > >, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::_M_erase (this=0x7fffe1f06e20, __x=0xb75450) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:1084
> #23 0x00007f2a76ff983c in std::_Rb_tree<rtl::OUString, std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> >, std::_Select1st<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > >, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::_M_erase (this=0x7fffe1f06e20, __x=0xb71920) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:1082
> #24 0x00007f2a76ff983c in std::_Rb_tree<rtl::OUString, std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> >, std::_Select1st<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > >, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::_M_erase (this=0x7fffe1f06e20, __x=0xb16230) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:1082
> #25 0x00007f2a76ff983c in std::_Rb_tree<rtl::OUString, std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> >, std::_Select1st<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > >, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::_M_erase (this=0x7fffe1f06e20, __x=0xb0db00) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:1082
> #26 0x00007f2a76ff9078 in std::_Rb_tree<rtl::OUString, std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> >, std::_Select1st<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > >, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::~_Rb_tree (this=0x7fffe1f06e20, __in_chrg=<optimized out>) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:646
> #27 0x00007f2a76ff8574 in std::__cxx1998::map<rtl::OUString, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation>, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::~map (this=0x7fffe1f06e20, __in_chrg=<optimized out>) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_map.h:90
> #28 0x00007f2a76ff8610 in std::__debug::map<rtl::OUString, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation>, std::less<rtl::OUString>, std::allocator<std::pair<rtl::OUString const, boost::shared_ptr<cppuhelper::ServiceManager::Data::Implementation> > > >::~map (this=0x7fffe1f06e20, __in_chrg=<optimized out>) at /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/debug/map.h:107
> #29 0x00007f2a7705be2e in cppuhelper::ServiceManager::Data::~Data (this=0x7fffe1f06e20, __in_chrg=<optimized out>) at lo/core/cppuhelper/source/servicemanager.hxx:52
> #30 0x00007f2a7705215c in cppuhelper::ServiceManager::disposing (this=0x7f2a66137208) at lo/core/cppuhelper/source/servicemanager.cxx:712
> #31 0x00007f2a7700aad8 in cppu::WeakComponentImplHelperBase::dispose (this=0x7f2a66137208) at lo/core/cppuhelper/source/implbase.cxx:268
> #32 0x00007f2a76ffb240 in cppu::WeakComponentImplHelper8<com::sun::star::lang::XServiceInfo, com::sun::star::lang::XMultiServiceFactory, com::sun::star::lang::XMultiComponentFactory, com::sun::star::container::XSet, com::sun::star::container::XContentEnumerationAccess, com::sun::star::beans::XPropertySet, com::sun::star::beans::XPropertySetInfo, com::sun::star::lang::XEventListener>::dispose (this=0x7f2a66137208) at lo/core/include/cppuhelper/compbase8.hxx:66
> #33 0x00007f2a76fe0495 in cppu::try_dispose (xInstance=uno::Reference to (cppuhelper::ServiceManager *) 0x7f2a66137268) at lo/core/cppuhelper/source/component_context.cxx:276
> #34 0x00007f2a76fe2600 in cppu::ComponentContext::disposing (this=0x7f2a66139248) at lo/core/cppuhelper/source/component_context.cxx:741
> #35 0x00007f2a7700aad8 in cppu::WeakComponentImplHelperBase::dispose (this=0x7f2a66139248) at lo/core/cppuhelper/source/implbase.cxx:268
> #36 0x00007f2a76ff154a in cppu::WeakComponentImplHelper2<com::sun::star::uno::XComponentContext, com::sun::star::container::XNameContainer>::dispose (this=0x7f2a66139248) at lo/core/include/cppuhelper/compbase2.hxx:66
> #37 0x00007f2a77b03e70 in desktop::Desktop::DeInit (this=0x7fffe1f07830) at lo/core/desktop/source/app/app.cxx:670
> #38 0x00007f2a730e9bb8 in DeInitVCL () at lo/core/vcl/source/app/svmain.cxx:487
> #39 0x00007f2a730e8e24 in ImplSVMain () at lo/core/vcl/source/app/svmain.cxx:185
> #40 0x00007f2a730e8e71 in SVMain () at lo/core/vcl/source/app/svmain.cxx:198
> #41 0x00007f2a77b4d12d in soffice_main () at lo/core/desktop/source/app/sofficemain.cxx:81
> #42 0x0000000000400968 in sal_main () at lo/core/desktop/source/app/main.c:48
> #43 0x0000000000400949 in main (argc=2, argv=0x7fffe1f07b78) at lo/core/desktop/source/app/main.c:47

other UNO services (like the TempFile one) are already disposed when the 
dbaccess::ODatabaseContext service impl is disposed and in turn disposes 
its cached datasources, which in turn appear to always call 
commitStorageIfWriteable_ignoreErrors.

No real insight into any of this, but would it make sense to rely on 
some explicit "commit" stimulus to do that committing, instead of doing 
it upon "dispose" (or at least take into account m_bModified and not try 
to commit if not necessary?).

Stephan


More information about the LibreOffice mailing list