private:
int m_initCount;
- Mutex* m_lock;
+ std::auto_ptr<Mutex> m_lock;
std::map<std::string,Mutex*> m_namedLocks;
std::vector<void*> m_libhandles;
ParserPool* m_parserPool;
return false;
}
- Lock lock(m_lock.get());
+ Lock lock(m_lock);
m_schemaLocMap[nsURI]=pathname;
m_schemaLocations.erase();
for_each(m_schemaLocMap.begin(), m_schemaLocMap.end(), doubleit<xstring>(m_schemaLocations,chSpace));
// Fetch all the <system> elements.
DOMNodeList* mappings=root->getElementsByTagNameNS(CATALOG_NS,system);
- Lock lock(m_lock.get());
+ Lock lock(m_lock);
for (XMLSize_t i=0; i<mappings->getLength(); i++) {
root=static_cast<DOMElement*>(mappings->item(i));
const XMLCh* from=root->getAttributeNS(nullptr,systemId);
DOMLSParser* ParserPool::checkoutBuilder()
{
- Lock lock(m_lock.get());
+ Lock lock(m_lock);
if (m_pool.empty()) {
DOMLSParser* builder=createBuilder();
return builder;
void ParserPool::checkinBuilder(DOMLSParser* builder)
{
if (builder) {
- Lock lock(m_lock.get());
+ Lock lock(m_lock);
m_pool.push(builder);
}
}
DOMBuilder* ParserPool::checkoutBuilder()
{
- Lock lock(m_lock.get());
+ Lock lock(m_lock);
if (m_pool.empty()) {
DOMBuilder* builder=createBuilder();
return builder;
void ParserPool::checkinBuilder(DOMBuilder* builder)
{
if (builder) {
- Lock lock(m_lock.get());
+ Lock lock(m_lock);
m_pool.push(builder);
}
}
#include <xmltooling/exceptions.h>
+#include <memory>
#include <signal.h>
namespace xmltooling
}
/**
+ * Locks and wraps the designated mutex.
+ *
+ * @param mtx mutex to lock
+ */
+ Lock(std::auto_ptr<Mutex>& mtx) : mutex(mtx.get()) {
+ if (mutex)
+ mutex->lock();
+ }
+
+ /**
* Unlocks the wrapped mutex.
*/
~Lock() {
}
/**
+ * Locks and wraps the designated shared lock.
+ *
+ * @param lock lock to acquire
+ * @param lockit true if the lock should be acquired here, false if already acquired
+ */
+ SharedLock(std::auto_ptr<RWLock>& lock, bool lockit=true) : rwlock(lock.get()) {
+ if (rwlock && lockit)
+ rwlock->rdlock();
+ }
+
+ /**
* Unlocks the wrapped shared lock.
*/
~SharedLock() {