1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /*
19  * $Id$
20  */
21 
22 
23 
24 // ---------------------------------------------------------------------------
25 //  Includes
26 // ---------------------------------------------------------------------------
27 #include <xercesc/util/XercesDefs.hpp>
28 #include <xercesc/util/PlatformUtils.hpp>
29 #include <xercesc/util/Mutexes.hpp>
30 
31 XERCES_CPP_NAMESPACE_BEGIN
32 
33 // ---------------------------------------------------------------------------
34 //  XMLMutex: Constructors and Destructor
35 // ---------------------------------------------------------------------------
XMLMutex(MemoryManager * const manager)36 XMLMutex::XMLMutex(MemoryManager* const manager) :
37 
38     fHandle(0),
39     fManager(manager)
40 {
41     // Ask the per-platform driver to make us a mutex
42     fHandle = XMLPlatformUtils::makeMutex(manager);
43 }
44 
45 
~XMLMutex()46 XMLMutex::~XMLMutex()
47 {
48     if (fHandle)
49     {
50         XMLPlatformUtils::closeMutex(fHandle, fManager);
51         fHandle = 0;
52     }
53 }
54 
55 
56 // ---------------------------------------------------------------------------
57 //  XMLMutex: Lock control methods
58 // ---------------------------------------------------------------------------
lock()59 void XMLMutex::lock()
60 {
61     XMLPlatformUtils::lockMutex(fHandle);
62 }
63 
unlock()64 void XMLMutex::unlock()
65 {
66     XMLPlatformUtils::unlockMutex(fHandle);
67 }
68 
69 
70 
71 // ---------------------------------------------------------------------------
72 //  XMLMutexLock: Constructors and Destructor
73 // ---------------------------------------------------------------------------
XMLMutexLock(XMLMutex * const toLock)74 XMLMutexLock::XMLMutexLock(XMLMutex* const toLock) :
75 
76     fToLock(toLock)
77 {
78     fToLock->lock();
79 }
80 
81 
~XMLMutexLock()82 XMLMutexLock::~XMLMutexLock()
83 {
84     fToLock->unlock();
85 }
86 
87 XERCES_CPP_NAMESPACE_END
88