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

Lionel Elie Mamane lionel at mamane.lu
Fri Aug 16 06:46:11 PDT 2013


On Fri, Aug 16, 2013 at 02:55:35PM +0200, Stephan Bergmann wrote:
> 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!


Yes, see that all the time on .odb files; not only embedded HSQLDB
database. I find it curious it complains that it *could* do something,
usually messages complain that they could *not* do something.

Never looked at it in any depth.


> 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

> 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" 

I don't understand what "commit stimulus" is.

> (or at least take into account m_bModified and not try to commit if
> not necessary?).

This seems to make sense; embedded hsqldb are a bit weird because they
save some files (the ones in database/) "automatically" even without
user "save" action. I *hope* that this does not clobber m_bModified if
*other* changes are pending (e.g. creation / modification of a report
/ form / ...). I wouldn't be *too* surprised if the "save even when
m_bModified == false" was to work around a putative "m_bModified is
clobbered wrongly" issue.

-- 
Lionel


More information about the LibreOffice mailing list