1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_framework.hxx"
26 #include <helper/shareablemutex.hxx>
27 
28 namespace framework
29 {
30 
ShareableMutex()31 ShareableMutex::ShareableMutex()
32 {
33     pMutexRef = new MutexRef;
34     pMutexRef->acquire();
35 }
36 
ShareableMutex(const ShareableMutex & rShareableMutex)37 ShareableMutex::ShareableMutex( const ShareableMutex& rShareableMutex )
38 {
39     pMutexRef = rShareableMutex.pMutexRef;
40     if ( pMutexRef )
41         pMutexRef->acquire();
42 }
43 
operator =(const ShareableMutex & rShareableMutex)44 const ShareableMutex& ShareableMutex::operator=( const ShareableMutex& rShareableMutex )
45 {
46     if ( rShareableMutex.pMutexRef )
47         rShareableMutex.pMutexRef->acquire();
48     if ( pMutexRef )
49         pMutexRef->release();
50     pMutexRef = rShareableMutex.pMutexRef;
51     return *this;
52 }
53 
~ShareableMutex()54 ShareableMutex::~ShareableMutex()
55 {
56     if ( pMutexRef )
57         pMutexRef->release();
58 }
59 
acquire()60 void ShareableMutex::acquire()
61 {
62     if ( pMutexRef )
63         pMutexRef->m_oslMutex.acquire();
64 }
65 
release()66 void ShareableMutex::release()
67 {
68     if ( pMutexRef )
69         pMutexRef->m_oslMutex.release();
70 }
71 
getShareableOslMutex()72 ::osl::Mutex& ShareableMutex::getShareableOslMutex()
73 {
74     return pMutexRef->m_oslMutex;
75 }
76 
77 }
78