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 2008/08/29 15:55:41 UTC
svn commit: r690258 - in /activemq/activemq-cpp/trunk/src/main/activemq:
connector/openwire/ core/ transport/filters/
Author: tabish
Date: Fri Aug 29 06:55:40 2008
New Revision: 690258
URL: http://svn.apache.org/viewvc?rev=690258&view=rev
Log:
Make use of Atomic object where possible to reduce locking.
Modified:
activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.cpp
activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.h
activemq/activemq-cpp/trunk/src/main/activemq/core/ActiveMQConnectionFactory.h
activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.cpp
activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.h
Modified: activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.cpp?rev=690258&r1=690257&r2=690258&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.cpp Fri Aug 29 06:55:40 2008
@@ -38,7 +38,7 @@
wireInfoSentDownLatch(1),
readyCountDownLatch(1)
{
- this->firstTime = true;
+ this->firstTime.set( true );
this->openWireFormat = openWireFormat;
this->closed = true;
}
@@ -224,13 +224,10 @@
// Start the delegate transport object.
next->start();
- if( firstTime == true ) {
+ if( firstTime.compareAndSet( true, false ) ) {
try {
- // The First Time is now over with
- firstTime = false;
-
// We first send the WireFormat that we'd prefer.
next->oneway( openWireFormat->getPreferedWireFormatInfo() );
Modified: activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.h?rev=690258&r1=690257&r2=690258&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/connector/openwire/OpenWireFormatNegotiator.h Fri Aug 29 06:55:40 2008
@@ -25,6 +25,7 @@
#include <decaf/util/concurrent/Mutex.h>
#include <decaf/util/concurrent/CountDownLatch.h>
#include <decaf/util/concurrent/Concurrent.h>
+#include <decaf/util/concurrent/atomic/AtomicBoolean.h>
namespace activemq{
namespace connector{
@@ -41,7 +42,7 @@
/**
* Have we started already?
*/
- bool firstTime;
+ decaf::util::concurrent::atomic::AtomicBoolean firstTime;
/**
* Latch objects to count down till we receive the wireFormat info
Modified: activemq/activemq-cpp/trunk/src/main/activemq/core/ActiveMQConnectionFactory.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/core/ActiveMQConnectionFactory.h?rev=690258&r1=690257&r2=690258&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/core/ActiveMQConnectionFactory.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/core/ActiveMQConnectionFactory.h Fri Aug 29 06:55:40 2008
@@ -25,8 +25,7 @@
namespace activemq{
namespace core{
- class AMQCPP_API ActiveMQConnectionFactory : public cms::ConnectionFactory
- {
+ class AMQCPP_API ActiveMQConnectionFactory : public cms::ConnectionFactory {
private:
// The user name this factory will use to connect
@@ -41,7 +40,7 @@
public:
- ActiveMQConnectionFactory();
+ ActiveMQConnectionFactory();
/**
* Constructor
@@ -53,7 +52,7 @@
const std::string& username = "",
const std::string& password = "" );
- virtual ~ActiveMQConnectionFactory() {}
+ virtual ~ActiveMQConnectionFactory() {}
/**
* Creates a connection with the default user identity. The
Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.cpp?rev=690258&r1=690257&r2=690258&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.cpp Fri Aug 29 06:55:40 2008
@@ -25,30 +25,12 @@
using namespace decaf::lang::exceptions;
////////////////////////////////////////////////////////////////////////////////
-unsigned int ResponseCorrelator::getNextCommandId()
- throw ( activemq::exceptions::ActiveMQException ){
-
- try{
-
- synchronized( &commandIdMutex ){
- return ++nextCommandId;
- }
-
- // Should never get here, but some compilers aren't
- // smart enough to figure out we'll never get here.
- return 0;
- }
- AMQ_CATCH_RETHROW( exceptions::ActiveMQException )
- AMQ_CATCH_EXCEPTION_CONVERT( Exception, ActiveMQException )
- AMQ_CATCHALL_THROW( exceptions::ActiveMQException )
-}
-
-////////////////////////////////////////////////////////////////////////////////
ResponseCorrelator::ResponseCorrelator( Transport* next, bool own )
:
TransportFilter( next, own ) {
- nextCommandId = 0;
+ //nextCommandId = 0;
+ nextCommandId.set(1);
// Start in the closed state.
closed = true;
}
@@ -68,7 +50,7 @@
throw( CommandIOException, decaf::lang::exceptions::UnsupportedOperationException ) {
try{
- command->setCommandId( getNextCommandId() );
+ command->setCommandId( nextCommandId.getAndIncrement() );
command->setResponseRequired( false );
if( closed || next == NULL ){
@@ -90,7 +72,7 @@
throw( CommandIOException, decaf::lang::exceptions::UnsupportedOperationException ) {
try{
- command->setCommandId( getNextCommandId() );
+ command->setCommandId( nextCommandId.getAndIncrement() );
command->setResponseRequired( true );
// Add a future response object to the map indexed by this
@@ -147,7 +129,7 @@
throw( CommandIOException, decaf::lang::exceptions::UnsupportedOperationException ) {
try{
- command->setCommandId( getNextCommandId() );
+ command->setCommandId( nextCommandId.getAndIncrement() );
command->setResponseRequired( true );
// Add a future response object to the map indexed by this
Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.h?rev=690258&r1=690257&r2=690258&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/filters/ResponseCorrelator.h Fri Aug 29 06:55:40 2008
@@ -24,6 +24,7 @@
#include <activemq/transport/Command.h>
#include <decaf/util/concurrent/Mutex.h>
#include <decaf/util/concurrent/Concurrent.h>
+#include <decaf/util/concurrent/atomic/AtomicInteger.h>
#include <map>
#include <stdio.h>
@@ -43,7 +44,7 @@
/**
* The next command id for sent commands.
*/
- unsigned int nextCommandId;
+ decaf::util::concurrent::atomic::AtomicInteger nextCommandId;
/**
* Map of request ids to future response objects.
@@ -51,11 +52,6 @@
std::map<unsigned int, FutureResponse*> requestMap;
/**
- * Sync object for accessing the next command id variable.
- */
- decaf::util::concurrent::Mutex commandIdMutex;
-
- /**
* Sync object for accessing the request map.
*/
decaf::util::concurrent::Mutex mapMutex;
@@ -65,13 +61,6 @@
*/
bool closed;
- private:
-
- /**
- * Returns the next available command id.
- */
- unsigned int getNextCommandId() throw ( exceptions::ActiveMQException );
-
public:
/**