You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@etch.apache.org by ve...@apache.org on 2014/03/18 14:34:55 UTC
svn commit: r1578873 - in /etch/trunk/binding-cpp:
compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/
runtime/include/support/ runtime/include/transport/
runtime/src/main/support/ runtime/src/main/transport/
runtime/src/test/support/ ru...
Author: veithm
Date: Tue Mar 18 13:34:54 2014
New Revision: 1578873
URL: http://svn.apache.org/r1578873
Log:
Changing mailbox parameter from native pointer to smartpointer
The SmartPointer is needed as due to multi threading it is not know
who should delete the mailbox at the end. Either the generated code needs
to delete it or the stack itself. This problem is solved by using
smartpointers.
Change-Id: I2c1ac6ca3ed126afa438e700f5849ffdaf03b2bb
Modified:
etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_cpp.vm
etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_h.vm
etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResult.h
etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResultNone.h
etch/trunk/binding-cpp/runtime/include/support/EtchDeliveryService.h
etch/trunk/binding-cpp/runtime/include/support/EtchRemoteBase.h
etch/trunk/binding-cpp/runtime/include/transport/EtchDefaultDeliveryService.h
etch/trunk/binding-cpp/runtime/include/transport/EtchMailboxManager.h
etch/trunk/binding-cpp/runtime/include/transport/EtchPlainMailboxManager.h
etch/trunk/binding-cpp/runtime/src/main/support/EtchAsyncResultNone.cpp
etch/trunk/binding-cpp/runtime/src/main/support/EtchPlainMailbox.cpp
etch/trunk/binding-cpp/runtime/src/main/support/EtchRemoteBase.cpp
etch/trunk/binding-cpp/runtime/src/main/transport/EtchDefaultDeliveryService.cpp
etch/trunk/binding-cpp/runtime/src/main/transport/EtchPlainMailboxManager.cpp
etch/trunk/binding-cpp/runtime/src/test/support/EtchPlainMailboxTest.cpp
etch/trunk/binding-cpp/runtime/src/test/support/EtchRemoteBaseTest.cpp
etch/trunk/binding-cpp/runtime/src/test/transport/EtchDefaultDeliveryServiceTest.cpp
etch/trunk/binding-cpp/runtime/src/test/transport/EtchPlainMailboxManagerTest.cpp
Modified: etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_cpp.vm
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_cpp.vm?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_cpp.vm (original)
+++ etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_cpp.vm Tue Mar 18 13:34:54 2014
@@ -35,7 +35,7 @@ using namespace $namespace;
#foreach($n in $intf.iterator())
#if($n.isMsgDir($mc))
#if(!$n.isHidden())
-$clname::$n.name()AsyncResultRemote::$n.name()AsyncResultRemote($clname* base, EtchMailbox* mailbox)
+$clname::$n.name()AsyncResultRemote::$n.name()AsyncResultRemote($clname* base, capu::SmartPointer<EtchMailbox> mailbox)
: #if($n.hasReturn())EtchAsyncResult<$helper.getEtchTypeName($n.type(), false)>(base->mRuntime, mailbox)#{else}EtchAsyncResultNone(base->mRuntime, mailbox)#end {
mBase = base;
}
@@ -101,7 +101,7 @@ $intfname::$n.name()AsyncResultPtr $clna
msg->put($vfname::$p.vname($helper)(), obj$ObjCount);
#end
- EtchMailbox* mb = NULL;
+ capu::SmartPointer<EtchMailbox> mb = NULL;
status = base->begincall(msg, mb);
$n.name()AsyncResultRemote* result = new $n.name()AsyncResultRemote(base, mb);
Modified: etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_h.vm
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_h.vm?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_h.vm (original)
+++ etch/trunk/binding-cpp/compiler/src/main/resources/org/apache/etch/bindings/cpp/compiler/remote_h.vm Tue Mar 18 13:34:54 2014
@@ -64,7 +64,7 @@ namespace $namespace {
/**
* Create a new instance from $clname class
*/
- $n.name()AsyncResultRemote($clname* base, EtchMailbox* mailbox);
+ $n.name()AsyncResultRemote($clname* base, capu::SmartPointer<EtchMailbox> mailbox);
/**
* Destructor
Modified: etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResult.h
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResult.h?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResult.h (original)
+++ etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResult.h Tue Mar 18 13:34:54 2014
@@ -34,7 +34,7 @@ public:
* @param runtime
* @param mailbox
*/
- EtchAsyncResult(EtchRuntime* runtime = NULL, EtchMailbox* mailbox = NULL)
+ EtchAsyncResult(EtchRuntime* runtime = NULL, capu::SmartPointer<EtchMailbox> mailbox = NULL)
: EtchAsyncResultNone(runtime, mailbox), mResult(NULL), mHasResult(false) {
}
Modified: etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResultNone.h
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResultNone.h?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResultNone.h (original)
+++ etch/trunk/binding-cpp/runtime/include/support/EtchAsyncResultNone.h Tue Mar 18 13:34:54 2014
@@ -36,7 +36,7 @@ public:
* Constructor
* @param runtime
*/
- explicit EtchAsyncResultNone(EtchRuntime* runtime = NULL, EtchMailbox* mailbox = NULL);
+ explicit EtchAsyncResultNone(EtchRuntime* runtime = NULL, capu::SmartPointer<EtchMailbox> mailbox = NULL);
/**
* Destructor
@@ -71,7 +71,7 @@ protected:
void setMailboxStatus();
EtchRuntime* mRuntime;
- EtchMailbox* mMailbox;
+ capu::SmartPointer<EtchMailbox> mMailbox;
capu::Mutex mMutex;
capu::CondVar mCond;
capu::bool_t mHasMailboxStatus;
Modified: etch/trunk/binding-cpp/runtime/include/support/EtchDeliveryService.h
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/include/support/EtchDeliveryService.h?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/include/support/EtchDeliveryService.h (original)
+++ etch/trunk/binding-cpp/runtime/include/support/EtchDeliveryService.h Tue Mar 18 13:34:54 2014
@@ -38,7 +38,7 @@ public:
* @return ETCH_OK if the message was send.
* ETCH_ERROR if there is a problem sending.
*/
- virtual status_t begincall(capu::SmartPointer<EtchMessage> msg, EtchMailbox*& result) = 0;
+ virtual status_t begincall(capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox>& result) = 0;
/**
* Finishes a call sequence by waiting for the response message.
Modified: etch/trunk/binding-cpp/runtime/include/support/EtchRemoteBase.h
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/include/support/EtchRemoteBase.h?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/include/support/EtchRemoteBase.h (original)
+++ etch/trunk/binding-cpp/runtime/include/support/EtchRemoteBase.h Tue Mar 18 13:34:54 2014
@@ -71,7 +71,7 @@ public:
* @return a mailbox which can be used to read the response, using
* {@link #endcall(Mailbox, Type)}.
*/
- status_t begincall(capu::SmartPointer<EtchMessage> msg, EtchMailbox *&result);
+ status_t begincall(capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox> &result);
/**
* Finishes a call sequence by waiting for the response message.
Modified: etch/trunk/binding-cpp/runtime/include/transport/EtchDefaultDeliveryService.h
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/include/transport/EtchDefaultDeliveryService.h?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/include/transport/EtchDefaultDeliveryService.h (original)
+++ etch/trunk/binding-cpp/runtime/include/transport/EtchDefaultDeliveryService.h Tue Mar 18 13:34:54 2014
@@ -122,7 +122,7 @@ public:
/**
* @see EtchDeliveryService
*/
- virtual status_t begincall(capu::SmartPointer<EtchMessage> msg, EtchMailbox*& result);
+ virtual status_t begincall(capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox>& result);
/**
* @see EtchDeliveryService
Modified: etch/trunk/binding-cpp/runtime/include/transport/EtchMailboxManager.h
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/include/transport/EtchMailboxManager.h?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/include/transport/EtchMailboxManager.h (original)
+++ etch/trunk/binding-cpp/runtime/include/transport/EtchMailboxManager.h Tue Mar 18 13:34:54 2014
@@ -40,7 +40,7 @@ public:
* @param result the mailbox which will receive responses to this call.
* @return status code
*/
- virtual status_t transportCall(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, EtchMailbox*& result) = 0;
+ virtual status_t transportCall(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox>& result) = 0;
/**
* Removes the mailbox from the set of mailboxes receiving responses to
@@ -48,7 +48,7 @@ public:
* @param mb a mailbox as returned by {@link #transportCall(Who, Message)}.
* @return status code
*/
- virtual status_t unregisterMailbox(EtchMailbox* mb) = 0;
+ virtual status_t unregisterMailbox(EtchLong mailboxId) = 0;
/**
* Re-delivers dead letter messages from a closed mailbox.
Modified: etch/trunk/binding-cpp/runtime/include/transport/EtchPlainMailboxManager.h
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/include/transport/EtchPlainMailboxManager.h?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/include/transport/EtchPlainMailboxManager.h (original)
+++ etch/trunk/binding-cpp/runtime/include/transport/EtchPlainMailboxManager.h Tue Mar 18 13:34:54 2014
@@ -59,19 +59,19 @@ public:
* to messages.
* @param mb
*/
- status_t registerMailbox(EtchMailbox* mb);
+ status_t registerMailbox(capu::SmartPointer<EtchMailbox> mb);
/**
* @see EtchMailboxManager
*/
- status_t unregisterMailbox(EtchMailbox* mb);
+ status_t unregisterMailbox(EtchLong mailboxId);
/**
* Returns the mailbox for the specified msgid. This is a testing api.
* @param msgid
* @return the mailbox for the specified msgid.
*/
- status_t getMailbox(EtchLong msgid, EtchMailbox*& result);
+ status_t getMailbox(EtchLong msgid, capu::SmartPointer<EtchMailbox>& result);
////////////////////////////
// MessageHandler methods //
@@ -81,7 +81,7 @@ public:
///////////////////////////
// MessageSource methods //
///////////////////////////
- status_t transportCall(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, EtchMailbox*& result);
+ status_t transportCall(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox>& result);
status_t transportMessage(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> message);
///////////////////////////
@@ -109,7 +109,7 @@ private:
EtchSessionMessage* mSession;
EtchTransportMessage* mTransport;
capu::bool_t mUp;
- EtchHashTable<EtchLong, EtchMailbox*> mMailboxes;
+ EtchHashTable<EtchLong, capu::SmartPointer<EtchMailbox> > mMailboxes;
capu::Mutex mMutex;
EtchIdGenerator mIdGen;
};
Modified: etch/trunk/binding-cpp/runtime/src/main/support/EtchAsyncResultNone.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/main/support/EtchAsyncResultNone.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/main/support/EtchAsyncResultNone.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/main/support/EtchAsyncResultNone.cpp Tue Mar 18 13:34:54 2014
@@ -20,25 +20,24 @@
#define MAILBOX_NOTIFY_TIMEOUT 2000
-EtchAsyncResultNone::EtchAsyncResultNone(EtchRuntime* runtime, EtchMailbox* mailbox)
+EtchAsyncResultNone::EtchAsyncResultNone(EtchRuntime* runtime, capu::SmartPointer<EtchMailbox> mailbox)
: mRuntime(runtime), mMailbox(mailbox), mHasMailboxStatus(false), mHasException(false), mException(NULL) {
- if(mailbox != NULL) {
+ if(mailbox.get() != NULL) {
mMailbox->registerNotify(this, NULL, MAILBOX_NOTIFY_TIMEOUT);
}
}
EtchAsyncResultNone::~EtchAsyncResultNone() {
- if(mMailbox != NULL) {
+ if(mMailbox.get() != NULL) {
mMailbox->unregisterNotify(this);
mMailbox->closeDelivery(false);
- delete mMailbox;
}
}
capu::bool_t EtchAsyncResultNone::hasException() {
mMutex.lock();
- while(mMailbox != NULL && !mHasMailboxStatus) {
+ while(mMailbox.get() != NULL && !mHasMailboxStatus) {
mCond.wait(&mMutex);
}
mMutex.unlock();
Modified: etch/trunk/binding-cpp/runtime/src/main/support/EtchPlainMailbox.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/main/support/EtchPlainMailbox.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/main/support/EtchPlainMailbox.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/main/support/EtchPlainMailbox.cpp Tue Mar 18 13:34:54 2014
@@ -67,15 +67,16 @@ void EtchPlainMailbox::fireNotify() {
s = mState;
c = mQueue.isClosed();
- mMutex.unlock();
-
if (n != NULL) {
n->mailboxStatus(this, s, c);
}
+ mMutex.unlock();
}
status_t EtchPlainMailbox::read(EtchMailbox::EtchElement*& result) {
+ mMutex.lock();
status_t status = mQueue.get(&result);
+ mMutex.unlock();
if(ETCH_OK == status) {
return ETCH_OK;
}
@@ -84,7 +85,9 @@ status_t EtchPlainMailbox::read(EtchMail
}
status_t EtchPlainMailbox::read(EtchMailbox::EtchElement *& result, capu::int32_t maxDelay) {
+ mMutex.lock();
status_t status = mQueue.get(&result, maxDelay);
+ mMutex.unlock();
if(status == ETCH_OK) {
return ETCH_OK;
}
@@ -99,7 +102,7 @@ status_t EtchPlainMailbox::closeDelivery
return ETCH_EINVAL;
}
- mMailboxManager->unregisterMailbox(this);
+ mMailboxManager->unregisterMailbox(getMessageId());
mQueue.close();
mMutex.unlock();
Modified: etch/trunk/binding-cpp/runtime/src/main/support/EtchRemoteBase.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/main/support/EtchRemoteBase.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/main/support/EtchRemoteBase.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/main/support/EtchRemoteBase.cpp Tue Mar 18 13:34:54 2014
@@ -46,7 +46,7 @@ status_t EtchRemoteBase::send(capu::Smar
return mSvc->transportMessage(NULL, msg);
}
-status_t EtchRemoteBase::begincall(capu::SmartPointer<EtchMessage> msg, EtchMailbox *&result) {
+status_t EtchRemoteBase::begincall(capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox> &result) {
ETCH_LOG_DEBUG(mRuntime->getLogger(), mRuntime->getLogger().getDeliveryServiceContext(), "Begin call for the message is initiated");
return mSvc->begincall(msg, result);
}
Modified: etch/trunk/binding-cpp/runtime/src/main/transport/EtchDefaultDeliveryService.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/main/transport/EtchDefaultDeliveryService.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/main/transport/EtchDefaultDeliveryService.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/main/transport/EtchDefaultDeliveryService.cpp Tue Mar 18 13:34:54 2014
@@ -141,7 +141,7 @@ status_t EtchDefaultDeliveryService::tra
return mTransport->transportNotify(event);
}
-status_t EtchDefaultDeliveryService::begincall(capu::SmartPointer<EtchMessage> msg, EtchMailbox*& result) {
+status_t EtchDefaultDeliveryService::begincall(capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox> &result) {
ETCH_LOG_DEBUG(mRuntime->getLogger(), mRuntime->getLogger().getDeliveryServiceContext(), "Begin call for the message has been initiated");
return mTransport->transportCall(NULL, msg, result);
}
Modified: etch/trunk/binding-cpp/runtime/src/main/transport/EtchPlainMailboxManager.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/main/transport/EtchPlainMailboxManager.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/main/transport/EtchPlainMailboxManager.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/main/transport/EtchPlainMailboxManager.cpp Tue Mar 18 13:34:54 2014
@@ -28,13 +28,12 @@ EtchPlainMailboxManager::EtchPlainMailbo
EtchPlainMailboxManager::~EtchPlainMailboxManager() {
mMutex.lock();
- EtchHashTable<EtchLong, EtchMailbox*>::Iterator it = mMailboxes.begin();
- EtchHashTable<EtchLong, EtchMailbox*>::HashTableEntry entry;
+ EtchHashTable<EtchLong, capu::SmartPointer<EtchMailbox> >::Iterator it = mMailboxes.begin();
+ EtchHashTable<EtchLong, capu::SmartPointer<EtchMailbox> >::HashTableEntry entry;
while (it.hasNext()) {
it.next(&entry);
entry.value->closeDelivery();
- delete entry.value;
}
mMutex.unlock();
@@ -48,8 +47,8 @@ status_t EtchPlainMailboxManager::redeli
return mSession->sessionMessage(sender, msg);
}
-status_t EtchPlainMailboxManager::registerMailbox(EtchMailbox* mb) {
- if(mb == NULL) {
+status_t EtchPlainMailboxManager::registerMailbox(capu::SmartPointer<EtchMailbox> mb) {
+ if(mb.get() == NULL) {
return ETCH_EINVAL;
}
@@ -59,7 +58,7 @@ status_t EtchPlainMailboxManager::regist
return ETCH_EINVAL;
}
- EtchMailbox* tmp = NULL;
+ capu::SmartPointer<EtchMailbox> tmp = NULL;
if (mMailboxes.get(msgid, &tmp) != ETCH_ENOT_EXIST) {
return ETCH_EINVAL;
}
@@ -69,38 +68,42 @@ status_t EtchPlainMailboxManager::regist
return ETCH_OK;
}
-status_t EtchPlainMailboxManager::unregisterMailbox(EtchMailbox* mb) {
- if(mb == NULL) {
- return ETCH_EINVAL;
- }
-
- EtchMailbox* tmp = NULL;
- mMailboxes.remove(mb->getMessageId(), &tmp);
+status_t EtchPlainMailboxManager::unregisterMailbox(EtchLong mailboxId) {
+ capu::SmartPointer<EtchMailbox> tmp = NULL;
+ mMutex.lock();
+ mMailboxes.remove(mailboxId, &tmp);
+ mMutex.unlock();
return ETCH_OK;
}
-status_t EtchPlainMailboxManager::getMailbox(EtchLong msgid, EtchMailbox*& result) {
- return mMailboxes.get(msgid, &result);
+status_t EtchPlainMailboxManager::getMailbox(EtchLong msgid, capu::SmartPointer<EtchMailbox>& result) {
+ status_t status = mMailboxes.get(msgid, &result);
+ return status;
}
status_t EtchPlainMailboxManager::sessionMessage(capu::SmartPointer<EtchWho> sender, capu::SmartPointer<EtchMessage> msg) {
capu::int64_t msgid;
if(msg->getInReplyToMessageId(msgid) == ETCH_OK) {
- EtchMailbox* mb = NULL;
+ capu::SmartPointer<EtchMailbox> mb = NULL;
ETCH_LOG_DEBUG(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "A message has been received as answer to message identified by msgid " << msgid);
+ mMutex.lock();
if (getMailbox(msgid, mb) != ETCH_OK) {
- ETCH_LOG_ERROR(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "Unable to get Mailbox fro msgid " << msgid);
+ mMutex.unlock();
+ ETCH_LOG_ERROR(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "Mailbox for Message with msgid " << msgid << "has already been closed and removed. Dropping message.");
return ETCH_ERROR;
}
+ mMutex.unlock();
ETCH_LOG_DEBUG(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "Message has been sent to respective mailbox");
- return mb->message(sender, msg);
+ status_t status = mb->message(sender, msg);
+
+ return status;
}
// no msgid - pass off to session
ETCH_LOG_DEBUG(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "Message has been sent to upper layer directly as no msgid was given");
return mSession->sessionMessage(sender, msg);
}
-status_t EtchPlainMailboxManager::transportCall(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, EtchMailbox*& result) {
+status_t EtchPlainMailboxManager::transportCall(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox>& result) {
capu::int64_t tmp;
if (msg->getMessageId(tmp) == ETCH_OK) {
// message has already been sent
@@ -118,10 +121,9 @@ status_t EtchPlainMailboxManager::transp
}
ETCH_LOG_DEBUG(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "A mailbox has been created for msgid " << msgid);
- EtchMailbox *mb = new EtchPlainMailbox(this, msgid);
+ capu::SmartPointer<EtchMailbox> mb = new EtchPlainMailbox(this, msgid);
mMutex.lock();
if (registerMailbox(mb) != ETCH_OK) {
- delete mb;
ETCH_LOG_ERROR(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "Mailbox registration failed");
mMutex.unlock();
return ETCH_ERROR;
@@ -134,7 +136,6 @@ status_t EtchPlainMailboxManager::transp
return ETCH_OK;
} else {
mb->closeDelivery();
- delete mb;
mMutex.unlock();
return ETCH_ERROR;
}
@@ -183,12 +184,11 @@ status_t EtchPlainMailboxManager::sessio
ETCH_LOG_TRACE(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "Connection is up");
} else if (event->equals(&EtchSession::DOWN())) {
mUp = false;
- EtchHashTable<EtchLong, EtchMailbox*>::Iterator it = mMailboxes.begin();
- EtchHashTable<EtchLong, EtchMailbox*>::HashTableEntry entry;
+ EtchHashTable<EtchLong, capu::SmartPointer<EtchMailbox> >::Iterator it = mMailboxes.begin();
+ EtchHashTable<EtchLong, capu::SmartPointer<EtchMailbox> >::HashTableEntry entry;
while (it.hasNext()) {
it.next(&entry);
entry.value->closeDelivery();
- delete entry.value;
}
ETCH_LOG_TRACE(mRuntime->getLogger(), mRuntime->getLogger().getMailboxContext(), "Connection is down");
}
Modified: etch/trunk/binding-cpp/runtime/src/test/support/EtchPlainMailboxTest.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/test/support/EtchPlainMailboxTest.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/test/support/EtchPlainMailboxTest.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/test/support/EtchPlainMailboxTest.cpp Tue Mar 18 13:34:54 2014
@@ -30,7 +30,7 @@ public:
capu::bool_t unregistered;
EtchList<EtchMailbox::EtchElement *> list;
- virtual status_t unregisterMailbox(EtchMailbox* mb) {
+ virtual status_t unregisterMailbox(EtchLong mailboxId) {
unregistered = true;
return ETCH_OK;
}
@@ -39,11 +39,11 @@ public:
return list.add(new EtchMailbox::EtchElement(sender, msg));
}
- MOCK_METHOD2(getMailbox, status_t(EtchLong msgid, EtchMailbox*& result));
+ MOCK_METHOD2(getMailbox, status_t(EtchLong msgid, capu::SmartPointer<EtchMailbox>& result));
MOCK_METHOD2(sessionMessage, status_t(capu::SmartPointer<EtchWho> sender, capu::SmartPointer<EtchMessage> msg));
- MOCK_METHOD3(transportCall, status_t(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, EtchMailbox*& result));
+ MOCK_METHOD3(transportCall, status_t(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> msg, capu::SmartPointer<EtchMailbox>& result));
MOCK_METHOD2(transportMessage, status_t(capu::SmartPointer<EtchWho> recipient, capu::SmartPointer<EtchMessage> message));
@@ -75,11 +75,10 @@ public:
TEST(EtchPlainMessageBoxTest, constructorTest) {
MockMailboxManager2 manager;
- EtchMailbox* mailbox = NULL;
+ capu::SmartPointer<EtchMailbox> mailbox = NULL;
EtchLong id(5);
mailbox = new EtchPlainMailbox(&manager, id);
- EXPECT_TRUE(mailbox != NULL);
- delete mailbox;
+ EXPECT_TRUE(mailbox.get() != NULL);
}
TEST(EtchPlainMessageBoxTest, closeDeliveryTest) {
Modified: etch/trunk/binding-cpp/runtime/src/test/support/EtchRemoteBaseTest.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/test/support/EtchRemoteBaseTest.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/test/support/EtchRemoteBaseTest.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/test/support/EtchRemoteBaseTest.cpp Tue Mar 18 13:34:54 2014
@@ -260,9 +260,9 @@ TEST_F(EtchRemoteBaseTest, beginCallTest
manager->sessionNotify(new EtchString(EtchSession::UP()));
- EtchMailbox *mail = NULL;
+ capu::SmartPointer<EtchMailbox> mail = NULL;
EXPECT_TRUE(remote->begincall(msg, mail) == ETCH_OK);
- EXPECT_TRUE(mail != NULL);
+ EXPECT_TRUE(mail.get() != NULL);
factory->types.clear();
@@ -314,10 +314,10 @@ TEST_F(EtchRemoteBaseTest, endCallTest)
manager->sessionNotify(new EtchString(EtchSession::UP()));
- EtchMailbox *mail = NULL;
+ capu::SmartPointer<EtchMailbox> mail = NULL;
EXPECT_TRUE(remote->begincall(message, mail) == ETCH_OK);
- EXPECT_TRUE(mail != NULL);
+ EXPECT_TRUE(mail.get() != NULL);
capu::int64_t id;
message->getMessageId(id);
@@ -331,14 +331,13 @@ TEST_F(EtchRemoteBaseTest, endCallTest)
//call the sessionMessage of mailbox manager as if it is called from messagizer to deliver data from
EXPECT_TRUE(ETCH_OK == manager->sessionMessage(NULL, replymess));
capu::SmartPointer<EtchObject> result;
- EXPECT_TRUE(remote->endcall(mail, replyType, result) == ETCH_OK);
- EXPECT_TRUE(mail != NULL);
+ EXPECT_TRUE(remote->endcall(mail.get(), replyType, result) == ETCH_OK);
+ EXPECT_TRUE(mail.get() != NULL);
EXPECT_TRUE(result == data);
factory->types.clear();
delete transport;
- delete mail;
delete remote;
delete manager;
delete service;
Modified: etch/trunk/binding-cpp/runtime/src/test/transport/EtchDefaultDeliveryServiceTest.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/test/transport/EtchDefaultDeliveryServiceTest.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/test/transport/EtchDefaultDeliveryServiceTest.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/test/transport/EtchDefaultDeliveryServiceTest.cpp Tue Mar 18 13:34:54 2014
@@ -175,7 +175,7 @@ TEST_F(EtchDefaultDeliveryServiceTest, b
mailboxManager->sessionNotify(new EtchString(EtchSession::UP()));
//test begincall
- EtchMailbox *mail = NULL;
+ capu::SmartPointer<EtchMailbox> mail = NULL;
EXPECT_TRUE(ETCH_OK == deliveryService->begincall(message, mail));
EXPECT_EQ(1u, mailboxManager->count());
EXPECT_TRUE(ETCH_OK == message->getMessageId(id));
@@ -233,7 +233,7 @@ TEST_F(EtchDefaultDeliveryServiceTest, e
mailboxManager->sessionNotify(new EtchString(EtchSession::UP()));
//performed the call
- EtchMailbox *mail;
+ capu::SmartPointer<EtchMailbox> mail;
EXPECT_TRUE(ETCH_OK == deliveryService->begincall(message, mail));
EXPECT_EQ(1u, mailboxManager->count());
EXPECT_TRUE(ETCH_OK == message->getMessageId(id));
@@ -256,9 +256,8 @@ TEST_F(EtchDefaultDeliveryServiceTest, e
//wait for the response
capu::SmartPointer<EtchObject> result;
- status = deliveryService->endcall(mail, replyType, result);
+ status = deliveryService->endcall(mail.get(), replyType, result);
EXPECT_EQ(ETCH_OK, status);
- delete mail;
//check the result
EXPECT_TRUE(result->equals(data.get()));
Modified: etch/trunk/binding-cpp/runtime/src/test/transport/EtchPlainMailboxManagerTest.cpp
URL: http://svn.apache.org/viewvc/etch/trunk/binding-cpp/runtime/src/test/transport/EtchPlainMailboxManagerTest.cpp?rev=1578873&r1=1578872&r2=1578873&view=diff
==============================================================================
--- etch/trunk/binding-cpp/runtime/src/test/transport/EtchPlainMailboxManagerTest.cpp (original)
+++ etch/trunk/binding-cpp/runtime/src/test/transport/EtchPlainMailboxManagerTest.cpp Tue Mar 18 13:34:54 2014
@@ -157,7 +157,7 @@ TEST_F(EtchPlainMailboxManagerTest, tran
EXPECT_TRUE(ETCH_OK == message->getMessageId(id));
EXPECT_TRUE(ETCH_OK != message->getInReplyToMessageId(id));
- EtchMailbox *mail;
+ capu::SmartPointer<EtchMailbox> mail;
EXPECT_TRUE(ETCH_OK != manager->getMailbox(id, mail));
message->clear();
@@ -201,7 +201,7 @@ TEST_F(EtchPlainMailboxManagerTest, tran
EXPECT_TRUE(ETCH_OK == message->getMessageId(id));
EXPECT_TRUE(ETCH_OK == message->getInReplyToMessageId(id));
EXPECT_TRUE(id == 1L);
- EtchMailbox *mail;
+ capu::SmartPointer<EtchMailbox> mail;
EXPECT_TRUE(ETCH_OK != manager->getMailbox(id, mail));
message->clear();
@@ -239,13 +239,14 @@ TEST_F(EtchPlainMailboxManagerTest, tran
//in order to notify upper layers that the connection is open
manager->sessionNotify(new EtchString(EtchSession::UP()));
- EtchMailbox *mail;
+ capu::SmartPointer<EtchMailbox> mail;
EXPECT_TRUE(ETCH_OK == manager->transportCall(NULL, message, mail));
EXPECT_EQ(1u, manager->count());
EXPECT_TRUE(ETCH_OK == message->getMessageId(id));
EXPECT_TRUE(ETCH_OK != message->getInReplyToMessageId(id));
- EXPECT_TRUE(ETCH_OK == manager->getMailbox(id, mail));
+ capu::SmartPointer<EtchMailbox> out;
+ EXPECT_TRUE(ETCH_OK == manager->getMailbox(id, out));
message->clear();
@@ -285,7 +286,7 @@ TEST_F(EtchPlainMailboxManagerTest, repl
//in order to notify upper layers that the connection is open
manager->sessionNotify(new EtchString(EtchSession::UP()));
- EtchMailbox *mail;
+ capu::SmartPointer<EtchMailbox> mail;
EXPECT_TRUE(ETCH_ERROR == manager->transportCall(NULL, message, mail));
//should not create a mailbox
EXPECT_EQ(ETCH_OK, message->getMessageId(id));
@@ -333,7 +334,7 @@ TEST_F(EtchPlainMailboxManagerTest, sess
manager->sessionNotify(new EtchString(EtchSession::UP()));
//perform the call
- EtchMailbox *mail;
+ capu::SmartPointer<EtchMailbox> mail;
EXPECT_TRUE(ETCH_OK == manager->transportCall(NULL, message, mail));
EXPECT_EQ(1u, manager->count());
EXPECT_TRUE(ETCH_OK == message->getMessageId(id));