Kaydet (Commit) 184e4ef3 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

rhbz#1016758: Dispose bridges when disposing bridge factory

... (which happens when the service manager is disposed), so that no bridges can
still run during exit.  But this is so glaring that I wonder whether I missed
the obvious when I originally wrote that code, or whether I rather miss the
obvious now.  So better let this rest for a while on master before deciding
about any backports.

Change-Id: I7c9ad6c8a53dfd1a7b702640920dcb0a9a2c3007
üst 1706da9c
......@@ -116,6 +116,11 @@ css::uno::Reference< css::bridge::XBridge > BridgeFactory::createBridge(
rtl::Reference< Bridge > b;
{
osl::MutexGuard g(m_aMutex);
if (rBHelper.bDisposed) {
throw css::lang::DisposedException(
"BridgeFactory disposed",
static_cast< cppu::OWeakObject * >(this));
}
if (named_.find(sName) != named_.end()) {
throw css::bridge::BridgeExistsException(
sName, static_cast< cppu::OWeakObject * >(this));
......@@ -173,6 +178,32 @@ BridgeFactory::getExistingBridges() throw (css::uno::RuntimeException, std::exce
return s;
}
void BridgeFactory::disposing() {
BridgeList l1;
BridgeMap l2;
{
osl::MutexGuard g(m_aMutex);
l1.swap(unnamed_);
l2.swap(named_);
}
for (BridgeList::iterator i(l1.begin()); i != l1.end(); ++i) {
try {
css::uno::Reference<css::lang::XComponent>(
*i, css::uno::UNO_QUERY_THROW)->dispose();
} catch (css::uno::Exception & e) {
SAL_WARN("binaryurp", "ignoring Exception " << e.Message);
}
}
for (BridgeMap::iterator i(l2.begin()); i != l2.end(); ++i) {
try {
css::uno::Reference<css::lang::XComponent>(
i->second, css::uno::UNO_QUERY_THROW)->dispose();
} catch (css::uno::Exception & e) {
SAL_WARN("binaryurp", "ignoring Exception " << e.Message);
}
}
}
}
namespace {
......
......@@ -117,6 +117,8 @@ private:
com::sun::star::uno::Reference< com::sun::star::bridge::XBridge > >
SAL_CALL getExistingBridges() throw (com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
void SAL_CALL disposing() SAL_OVERRIDE;
typedef
std::list<
com::sun::star::uno::Reference< com::sun::star::bridge::XBridge > >
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment