You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2012/11/21 00:31:20 UTC
svn commit: r1411926 - in
/activemq/activemq-cpp/trunk/activemq-cpp/src/main: activemq/commands/
activemq/core/ activemq/wireformat/stomp/ decaf/lang/ decaf/util/
decaf/util/concurrent/ decaf/util/concurrent/locks/
Author: tabish
Date: Tue Nov 20 23:31:18 2012
New Revision: 1411926
URL: http://svn.apache.org/viewvc?rev=1411926&view=rev
Log:
Fix a bunch of compiler warnings
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTempDestination.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/DispatchData.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/StlMap.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/CountDownLatch.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/ThreadPoolExecutor.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractOwnableSynchronizer.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractQueuedSynchronizer.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTempDestination.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTempDestination.cpp?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTempDestination.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/commands/ActiveMQTempDestination.cpp Tue Nov 20 23:31:18 2012
@@ -35,7 +35,7 @@ ActiveMQTempDestination::ActiveMQTempDes
////////////////////////////////////////////////////////////////////////////////
ActiveMQTempDestination::ActiveMQTempDestination(const std::string& name) :
- ActiveMQDestination(name), Closeable(), connection(NULL) {
+ ActiveMQDestination(name), Closeable(), connection(NULL), connectionId(), sequenceId(0) {
}
////////////////////////////////////////////////////////////////////////////////
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp Tue Nov 20 23:31:18 2012
@@ -155,6 +155,7 @@ namespace core{
bool userSpecifiedClientID;
decaf::util::concurrent::Mutex ensureConnectionInfoSentMutex;
+ decaf::util::concurrent::Mutex onExceptionLock;
decaf::util::concurrent::Mutex mutex;
bool dispatchAsync;
@@ -198,6 +199,7 @@ namespace core{
transport(transport),
clientIdGenerator(),
scheduler(),
+ executor(),
sessionIds(),
consumerIdGenerator(),
tempDestinationIds(),
@@ -207,6 +209,7 @@ namespace core{
isConnectionInfoSentToBroker(false),
userSpecifiedClientID(false),
ensureConnectionInfoSentMutex(),
+ onExceptionLock(),
mutex(),
dispatchAsync(true),
alwaysSyncSend(false),
@@ -257,9 +260,11 @@ namespace core{
~ConnectionConfig() {
try {
- this->scheduler->shutdown();
- this->executor->shutdown();
- this->executor->awaitTermination(1, TimeUnit::MINUTES);
+ synchronized(&onExceptionLock) {
+ this->scheduler->shutdown();
+ this->executor->shutdown();
+ this->executor->awaitTermination(1, TimeUnit::MINUTES);
+ }
}
AMQ_CATCHALL_NOTHROW()
}
@@ -278,6 +283,11 @@ namespace core{
ActiveMQConnection* connection;
Pointer<ConnectionError> error;
+ private:
+
+ ConnectionErrorRunnable(const ConnectionErrorRunnable&);
+ ConnectionErrorRunnable& operator= (const ConnectionErrorRunnable&);
+
public:
ConnectionErrorRunnable(ActiveMQConnection* connection, Pointer<ConnectionError> error) :
@@ -299,6 +309,11 @@ namespace core{
ActiveMQConnection* connection;
Exception ex;
+ private:
+
+ OnAsyncExceptionRunnable(const OnAsyncExceptionRunnable&);
+ OnAsyncExceptionRunnable& operator= (const OnAsyncExceptionRunnable&);
+
public:
OnAsyncExceptionRunnable(ActiveMQConnection* connection, Exception ex) :
@@ -329,6 +344,11 @@ namespace core{
ConnectionConfig* config;
Exception* ex;
+ private:
+
+ OnExceptionRunnable(const OnExceptionRunnable&);
+ OnExceptionRunnable& operator= (const OnExceptionRunnable&);
+
public:
OnExceptionRunnable(ActiveMQConnection* connection, ConnectionConfig* config, Exception* ex) :
@@ -372,11 +392,15 @@ namespace core{
ConnectionConfig* config;
cms::AsyncCallback* callback;
+ private:
+
+ AsyncResponseCallback(const AsyncResponseCallback&);
+ AsyncResponseCallback& operator= (const AsyncResponseCallback&);
+
public:
AsyncResponseCallback(ConnectionConfig* config, cms::AsyncCallback* callback) :
ResponseCallback(), config(config), callback(callback) {
-
}
virtual ~AsyncResponseCallback() {
@@ -1105,11 +1129,14 @@ void ActiveMQConnection::onException(con
try {
- onAsyncException(ex);
-
- // We're disconnected - the asynchronous error is expected.
- if (!this->isClosed() || !this->closing.get()) {
- this->config->executor->execute(new OnExceptionRunnable(this, config, ex.clone()));
+ // Sync with the config destructor in case a client attempt to
+ synchronized(&this->config->onExceptionLock) {
+ onAsyncException(ex);
+
+ // We're disconnected - the asynchronous error is expected.
+ if (!this->isClosed() || !this->closing.get()) {
+ this->config->executor->execute(new OnExceptionRunnable(this, config, ex.clone()));
+ }
}
}
AMQ_CATCH_RETHROW(ActiveMQException)
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/DispatchData.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/DispatchData.cpp?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/DispatchData.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/DispatchData.cpp Tue Nov 20 23:31:18 2012
@@ -21,11 +21,10 @@ using namespace activemq;
using namespace activemq::core;
////////////////////////////////////////////////////////////////////////////////
-DispatchData::DispatchData() {}
+DispatchData::DispatchData() : consumerId(), message() {}
////////////////////////////////////////////////////////////////////////////////
DispatchData::DispatchData(const decaf::lang::Pointer<commands::ConsumerId>& consumer,
- const decaf::lang::Pointer<commands::Message>& message) {
- this->consumerId = consumer;
- this->message = message;
+ const decaf::lang::Pointer<commands::Message>& message) :
+ consumerId(consumer), message(message) {
}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.h?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.h Tue Nov 20 23:31:18 2012
@@ -54,6 +54,11 @@ namespace stomp {
activemq::util::LongSequenceGenerator messageIdGenerator;
StompWireFormat* wireFormat;
+ private:
+
+ StompHelper(const StompHelper&);
+ StompHelper& operator=(const StompHelper&);
+
public:
StompHelper(StompWireFormat* wireFormat);
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/wireformat/stomp/StompWireFormat.h Tue Nov 20 23:31:18 2012
@@ -54,6 +54,11 @@ namespace stomp {
// affecting binary compatibility.
StompWireformatProperties* properties;
+ private:
+
+ StompWireFormat(const StompWireFormat&);
+ StompWireFormat& operator=(const StompWireFormat&);
+
public:
StompWireFormat();
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h Tue Nov 20 23:31:18 2012
@@ -50,7 +50,7 @@ namespace lang {
* @since 1.0
*/
template<typename T, typename REFCOUNTER = decaf::util::concurrent::atomic::AtomicRefCounter>
- class Pointer: public REFCOUNTER {
+ class Pointer : public REFCOUNTER {
private:
typedef void (*deletionFuncPtr)(T* p);
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/StlMap.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/StlMap.h?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/StlMap.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/StlMap.h Tue Nov 20 23:31:18 2012
@@ -63,6 +63,11 @@ namespace util{
StlMap* associatedMap;
+ private:
+
+ AbstractMapIterator(const AbstractMapIterator&);
+ AbstractMapIterator& operator= (const AbstractMapIterator&);
+
public:
AbstractMapIterator(StlMap* parent) : position(0),
@@ -209,6 +214,11 @@ namespace util{
const StlMap* associatedMap;
+ private:
+
+ ConstAbstractMapIterator(const ConstAbstractMapIterator&);
+ ConstAbstractMapIterator& operator= (const ConstAbstractMapIterator&);
+
public:
ConstAbstractMapIterator(const StlMap* parent) : position(0),
@@ -625,7 +635,10 @@ namespace util{
/**
* Default constructor - does nothing.
*/
- StlMap() : Map<K,V>(), valueMap(), mutex(), modCount(0) {}
+ StlMap() : Map<K,V>(), valueMap(), mutex(), modCount(0),
+ cachedEntrySet(), cachedKeySet(), cachedValueCollection(),
+ cachedConstEntrySet(), cachedConstKeySet(), cachedConstValueCollection() {
+ }
/**
* Copy constructor - copies the content of the given map into this one.
@@ -633,7 +646,9 @@ namespace util{
* @param source
* The source StlMap whose entries are copied into this Map.
*/
- StlMap(const StlMap& source ) : Map<K,V>(), valueMap(), mutex(), modCount(0) {
+ StlMap(const StlMap& source ) : Map<K,V>(), valueMap(), mutex(), modCount(0),
+ cachedEntrySet(), cachedKeySet(), cachedValueCollection(),
+ cachedConstEntrySet(), cachedConstKeySet(), cachedConstValueCollection() {
copy(source);
}
@@ -643,7 +658,9 @@ namespace util{
* @param source
* The source ma whose entries are copied into this Map..
*/
- StlMap(const Map<K,V>& source) : Map<K,V>(), valueMap(), mutex(), modCount(0) {
+ StlMap(const Map<K,V>& source) : Map<K,V>(), valueMap(), mutex(), modCount(0),
+ cachedEntrySet(), cachedKeySet(), cachedValueCollection(),
+ cachedConstEntrySet(), cachedConstKeySet(), cachedConstValueCollection() {
copy(source);
}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/CountDownLatch.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/CountDownLatch.h?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/CountDownLatch.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/CountDownLatch.h Tue Nov 20 23:31:18 2012
@@ -35,13 +35,18 @@ namespace concurrent{
LatchSync* sync;
+ private:
+
+ CountDownLatch(const CountDownLatch&);
+ CountDownLatch& operator= (const CountDownLatch&);
+
public:
/**
* Constructor
* @param count - number to count down from.
*/
- CountDownLatch( int count );
+ CountDownLatch(int count);
virtual ~CountDownLatch();
@@ -100,7 +105,7 @@ namespace concurrent{
* @throws InterruptedException - if the current thread is interrupted while waiting.
* @throws Exception - if any other error occurs.
*/
- virtual bool await( long long timeOut );
+ virtual bool await(long long timeOut);
/**
* Causes the current thread to wait until the latch has counted down to zero, unless the
@@ -133,7 +138,7 @@ namespace concurrent{
* @throws InterruptedException - if the current thread is interrupted while waiting.
* @throws Exception - if any other error occurs.
*/
- virtual bool await( long long timeout, const TimeUnit& unit );
+ virtual bool await(long long timeout, const TimeUnit& unit);
/**
* Counts down the latch, releasing all waiting threads when
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/ThreadPoolExecutor.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/ThreadPoolExecutor.cpp?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/ThreadPoolExecutor.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/ThreadPoolExecutor.cpp Tue Nov 20 23:31:18 2012
@@ -65,6 +65,11 @@ namespace concurrent{
Runnable* task;
+ private:
+
+ UnownedTaskWrapper(const UnownedTaskWrapper&);
+ UnownedTaskWrapper& operator=(const UnownedTaskWrapper&);
+
public:
UnownedTaskWrapper(Runnable* task) : Runnable(), task(task) {
@@ -225,6 +230,11 @@ namespace concurrent{
ExecutorKernel* kernel;
+ private:
+
+ WorkerKiller(const WorkerKiller&);
+ WorkerKiller& operator=(const WorkerKiller&);
+
public:
WorkerKiller(ExecutorKernel* kernel) : kernel(kernel) {
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractOwnableSynchronizer.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractOwnableSynchronizer.h?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractOwnableSynchronizer.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractOwnableSynchronizer.h Tue Nov 20 23:31:18 2012
@@ -40,6 +40,11 @@ namespace locks {
decaf::lang::Thread* ownerThread;
+ private:
+
+ AbstractOwnableSynchronizer(const AbstractOwnableSynchronizer&);
+ AbstractOwnableSynchronizer& operator= (const AbstractOwnableSynchronizer&);
+
public:
virtual ~AbstractOwnableSynchronizer();
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractQueuedSynchronizer.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractQueuedSynchronizer.cpp?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractQueuedSynchronizer.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/AbstractQueuedSynchronizer.cpp Tue Nov 20 23:31:18 2012
@@ -202,14 +202,10 @@ namespace {
public:
- Node() : waitStatus(0), prev(NULL), next(NULL), thread(NULL), nextWaiter(NULL), nextFree(NULL) {
- }
- Node(Thread* thread, Node* node) : waitStatus(0), prev(NULL), next(NULL), thread(thread), nextWaiter(node), nextFree(NULL) {
- }
- Node(Thread* thread, int waitStatus) : waitStatus(waitStatus), prev(NULL), next(NULL), thread(thread), nextWaiter(NULL), nextFree(NULL) {
- }
- Node(Thread* thread, int waitStatus, Node* node) : waitStatus(waitStatus), prev(NULL), next(NULL), thread(thread), nextWaiter(node), nextFree(NULL) {
- }
+ Node() : waitStatus(0), prev(NULL), next(NULL), thread(NULL), nextWaiter(NULL), nextFree(NULL) {}
+ Node(Thread* thread, Node* node) : waitStatus(0), prev(NULL), next(NULL), thread(thread), nextWaiter(node), nextFree(NULL) {}
+ Node(Thread* thread, int waitStatus) : waitStatus(waitStatus), prev(NULL), next(NULL), thread(thread), nextWaiter(NULL), nextFree(NULL) {}
+ Node(Thread* thread, int waitStatus, Node* node) : waitStatus(waitStatus), prev(NULL), next(NULL), thread(thread), nextWaiter(node), nextFree(NULL) {}
~Node() {}
@@ -252,7 +248,6 @@ namespace {
NodePool() : head(), tail(NULL), size(0), lock() {
PlatformThread::createMutex(&lock);
-
}
~NodePool() {
@@ -361,6 +356,11 @@ namespace locks {
*/
NodePool nodePool;
+ private:
+
+ SynchronizerState(const SynchronizerState&);
+ SynchronizerState& operator=(const SynchronizerState&);
+
public:
SynchronizerState(AbstractQueuedSynchronizer* parent) :
@@ -368,7 +368,6 @@ namespace locks {
}
virtual ~SynchronizerState() {
-
while (tail.get() != NULL) {
nodePool.returnNode(tail.getAndSet(tail.get()->prev));
}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.cpp?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.cpp Tue Nov 20 23:31:18 2012
@@ -70,6 +70,11 @@ namespace {
static const int MAX_COUNT;
static const int EXCLUSIVE_MASK;
+ private:
+
+ Sync(const Sync&);
+ Sync& operator=(const Sync&);
+
public:
/** Returns the number of shared holds represented in count */
@@ -117,6 +122,8 @@ namespace {
Sync() : readHolds(), cachedHoldCounter(), firstReader(NULL), firstReaderHoldCount(0) {}
+ virtual ~Sync() {}
+
virtual bool isFair() const = 0;
/*
@@ -496,6 +503,11 @@ namespace {
};
class ReadLock : public decaf::util::concurrent::locks::Lock {
+ private:
+
+ ReadLock(const ReadLock&);
+ ReadLock& operator= (const ReadLock&);
+
public:
Sync* sync;
@@ -668,6 +680,11 @@ namespace {
};
class WriteLock : public decaf::util::concurrent::locks::Lock {
+ private:
+
+ WriteLock(const WriteLock&);
+ WriteLock& operator= (const WriteLock&);
+
public:
Sync* sync;
@@ -928,6 +945,11 @@ namespace concurrent {
namespace locks {
class ReentrantReadWriteLockImpl {
+ private:
+
+ ReentrantReadWriteLockImpl(const ReentrantReadWriteLockImpl&);
+ ReentrantReadWriteLockImpl& operator= (const ReentrantReadWriteLockImpl&);
+
public:
decaf::util::concurrent::locks::Lock* readLock;
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.h?rev=1411926&r1=1411925&r2=1411926&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantReadWriteLock.h Tue Nov 20 23:31:18 2012
@@ -40,6 +40,11 @@ namespace locks {
ReentrantReadWriteLockImpl* impl;
+ private:
+
+ ReentrantReadWriteLock(const ReentrantReadWriteLock&);
+ ReentrantReadWriteLock& operator=(const ReentrantReadWriteLock&);
+
public:
/**