diff options
-rw-r--r-- | ucb/source/ucp/webdav-neon/webdavcontent.cxx | 6 | ||||
-rw-r--r-- | ucb/source/ucp/webdav-neon/webdavcontent.hxx | 1 | ||||
-rw-r--r-- | ucb/source/ucp/webdav/SerfSession.cxx | 1 | ||||
-rw-r--r-- | ucb/source/ucp/webdav/webdavcontent.cxx | 6 | ||||
-rw-r--r-- | ucb/source/ucp/webdav/webdavcontent.hxx | 1 |
5 files changed, 15 insertions, 0 deletions
diff --git a/ucb/source/ucp/webdav-neon/webdavcontent.cxx b/ucb/source/ucp/webdav-neon/webdavcontent.cxx index fe49180627da..ea8ecb48d5ac 100644 --- a/ucb/source/ucp/webdav-neon/webdavcontent.cxx +++ b/ucb/source/ucp/webdav-neon/webdavcontent.cxx @@ -112,6 +112,7 @@ Content::Content( m_eResourceType( UNKNOWN ), m_pProvider( pProvider ), m_bTransient( false ), + m_bLocked( false ), m_bCollection( false ), m_bDidGetOrHead( false ) { @@ -144,6 +145,7 @@ Content::Content( m_eResourceType( UNKNOWN ), m_pProvider( pProvider ), m_bTransient( true ), + m_bLocked( false ), m_bCollection( isCollection ), m_bDidGetOrHead( false ) { @@ -164,6 +166,8 @@ Content::Content( // virtual Content::~Content() { + if (m_bLocked) + unlock(uno::Reference< ucb::XCommandEnvironment >()); } @@ -2820,6 +2824,7 @@ void Content::lock( uno::Sequence< OUString >() ); xResAccess->LOCK( aLock, Environment ); + m_bLocked = true; { osl::Guard< osl::Mutex > aGuard( m_aMutex ); @@ -2849,6 +2854,7 @@ void Content::unlock( } xResAccess->UNLOCK( Environment ); + m_bLocked = false; { osl::Guard< osl::Mutex > aGuard( m_aMutex ); diff --git a/ucb/source/ucp/webdav-neon/webdavcontent.hxx b/ucb/source/ucp/webdav-neon/webdavcontent.hxx index d738ce2f2666..7705c4e2aa1e 100644 --- a/ucb/source/ucp/webdav-neon/webdavcontent.hxx +++ b/ucb/source/ucp/webdav-neon/webdavcontent.hxx @@ -91,6 +91,7 @@ class Content : public ::ucbhelper::ContentImplHelper, ResourceType m_eResourceType; ContentProvider* m_pProvider; // No need for a ref, base class holds object bool m_bTransient; + bool m_bLocked; bool m_bCollection; bool m_bDidGetOrHead; std::vector< OUString > m_aFailedPropNames; diff --git a/ucb/source/ucp/webdav/SerfSession.cxx b/ucb/source/ucp/webdav/SerfSession.cxx index eea964434b09..a33b0a95e2c7 100644 --- a/ucb/source/ucp/webdav/SerfSession.cxx +++ b/ucb/source/ucp/webdav/SerfSession.cxx @@ -1103,6 +1103,7 @@ void SerfSession::UNLOCK( const OUString & inPath, { HandleError( aReqProc ); SAL_INFO("ucb.ucp.webdav", "UNLOCK of " << inPath << " succeeded." ); + apr_environment::AprEnv::getAprEnv()->getSerfLockStore()->removeLock( inPath ); } catch(...) { diff --git a/ucb/source/ucp/webdav/webdavcontent.cxx b/ucb/source/ucp/webdav/webdavcontent.cxx index dbc13b74b9a2..c91cfc2054fb 100644 --- a/ucb/source/ucp/webdav/webdavcontent.cxx +++ b/ucb/source/ucp/webdav/webdavcontent.cxx @@ -207,6 +207,7 @@ Content::Content( m_eResourceType( UNKNOWN ), m_pProvider( pProvider ), m_bTransient( false ), + m_bLocked( false ), m_bCollection( false ), m_bDidGetOrHead( false ) { @@ -239,6 +240,7 @@ Content::Content( m_eResourceType( UNKNOWN ), m_pProvider( pProvider ), m_bTransient( true ), + m_bLocked( false ), m_bCollection( isCollection ), m_bDidGetOrHead( false ) { @@ -259,6 +261,8 @@ Content::Content( // virtual Content::~Content() { + if (m_bLocked) + unlock(uno::Reference< ucb::XCommandEnvironment >()); } @@ -2944,6 +2948,7 @@ void Content::lock( uno::Sequence< OUString >() ); xResAccess->LOCK( aLock, Environment ); + m_bLocked = true; { osl::Guard< osl::Mutex > aGuard( m_aMutex ); @@ -2971,6 +2976,7 @@ void Content::unlock( } xResAccess->UNLOCK( Environment ); + m_bLocked = false; { osl::Guard< osl::Mutex > aGuard( m_aMutex ); diff --git a/ucb/source/ucp/webdav/webdavcontent.hxx b/ucb/source/ucp/webdav/webdavcontent.hxx index 04a115bfdea3..f6e06394ab33 100644 --- a/ucb/source/ucp/webdav/webdavcontent.hxx +++ b/ucb/source/ucp/webdav/webdavcontent.hxx @@ -82,6 +82,7 @@ class Content : public ::ucbhelper::ContentImplHelper, ResourceType m_eResourceType; ContentProvider* m_pProvider; // No need for a ref, base class holds object bool m_bTransient; + bool m_bLocked; bool m_bCollection; bool m_bDidGetOrHead; std::vector< OUString > m_aFailedPropNames; |