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 #include <mutex> 23 24 #include <xercesc/util/MutexManagers/StdMutexMgr.hpp> 25 #include <xercesc/util/PlatformUtils.hpp> 26 #include <xercesc/util/RuntimeException.hpp> 27 #include <xercesc/util/PanicHandler.hpp> 28 29 XERCES_CPP_NAMESPACE_BEGIN 30 31 32 // Wrap up the mutex with XMemory 33 class StdMutexWrap : public XMemory { 34 public: 35 std::recursive_mutex m; 36 }; 37 38 StdMutexMgr()39StdMutexMgr::StdMutexMgr() 40 { 41 } 42 43 ~StdMutexMgr()44StdMutexMgr::~StdMutexMgr() 45 { 46 } 47 48 49 XMLMutexHandle create(MemoryManager * const manager)50StdMutexMgr::create(MemoryManager* const manager) 51 { 52 StdMutexWrap* mutex = new (manager) StdMutexWrap; 53 return (void*)(mutex); 54 } 55 56 57 void destroy(XMLMutexHandle mtx,MemoryManager * const manager)58StdMutexMgr::destroy(XMLMutexHandle mtx, MemoryManager* const manager) 59 { 60 StdMutexWrap* mutex = (StdMutexWrap*)(mtx); 61 if (mutex != NULL) 62 { 63 delete mutex; 64 } 65 } 66 67 68 void lock(XMLMutexHandle mtx)69StdMutexMgr::lock(XMLMutexHandle mtx) 70 { 71 StdMutexWrap* mutex = (StdMutexWrap*)(mtx); 72 if (mutex != NULL) 73 { 74 mutex->m.lock(); 75 } 76 } 77 78 79 void unlock(XMLMutexHandle mtx)80StdMutexMgr::unlock(XMLMutexHandle mtx) 81 { 82 StdMutexWrap* mutex = (StdMutexWrap*)(mtx); 83 if (mutex != NULL) 84 { 85 mutex->m.unlock(); 86 } 87 } 88 89 90 XERCES_CPP_NAMESPACE_END 91 92