Skip to content

Commit

Permalink
Release sendReceiver during destructor of handle
Browse files Browse the repository at this point in the history
  • Loading branch information
durner committed Apr 19, 2024
1 parent a764526 commit 5afdab5
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 13 deletions.
4 changes: 3 additions & 1 deletion include/network/tasked_send_receiver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,8 @@ class TaskedSendReceiverHandle {
TaskedSendReceiverHandle(TaskedSendReceiverHandle&& other);
/// Move assignment
TaskedSendReceiverHandle& operator=(TaskedSendReceiverHandle&& other);
/// Destructor
~TaskedSendReceiverHandle();

/// Process group submissions (should be used for async requests)
inline bool process(bool oneQueueInvocation = true) { return sendReceive(false, oneQueueInvocation); }
Expand All @@ -192,7 +194,7 @@ class TaskedSendReceiverHandle {
/// Adds a message to the submission queue
bool sendSync(OriginalMessage* msg);
/// Stops the handle thread if deamon
void stop(bool freeSendReceiver = true);
void stop();
/// Returns the underlying TaskedSendReceiver
TaskedSendReceiver* get() { return _sendReceiver; }
/// Returns the underlying TaskedSendReceiverGroup
Expand Down
29 changes: 17 additions & 12 deletions src/network/tasked_send_receiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,22 @@ TaskedSendReceiverHandle& TaskedSendReceiverHandle::operator=(TaskedSendReceiver
return *this;
}
//---------------------------------------------------------------------------
TaskedSendReceiverHandle::~TaskedSendReceiverHandle()
// The destructor
{
if (!_sendReceiver)
return;
auto ptr = _sendReceiver;
for (auto head = _group->_head.load();;) {
ptr->_next = head;
if (_group->_head.compare_exchange_weak(head, ptr)) {
return;
}
head = _group->_head;
}
_sendReceiver = nullptr;
}
//---------------------------------------------------------------------------
bool TaskedSendReceiverHandle::sendSync(OriginalMessage* msg)
// Adds a message to the submission queue
{
Expand All @@ -108,23 +124,12 @@ bool TaskedSendReceiverHandle::sendSync(OriginalMessage* msg)
return true;
}
//---------------------------------------------------------------------------
void TaskedSendReceiverHandle::stop(bool freeSendReceiver)
void TaskedSendReceiverHandle::stop()
// Stops the deamon
{
if (!_sendReceiver)
return;
_sendReceiver->stop();
if (!freeSendReceiver)
return;
auto ptr = _sendReceiver;
for (auto head = _group->_head.load();;) {
ptr->_next = head;
if (_group->_head.compare_exchange_weak(head, ptr)) {
return;
}
head = _group->_head;
}
_sendReceiver = nullptr;
}
//---------------------------------------------------------------------------
bool TaskedSendReceiverHandle::sendReceive(bool local, bool oneQueueInvocation)
Expand Down

0 comments on commit 5afdab5

Please sign in to comment.