mirror of
https://github.com/zeromq/cppzmq.git
synced 2025-10-18 11:39:03 +02:00
Problem: monitor_t incorrectly deletes socket_t move assignment operator
Solution: Implement a move assignment operator for monitor_t
This commit is contained in:
26
zmq.hpp
26
zmq.hpp
@@ -821,14 +821,9 @@ class monitor_t
|
||||
|
||||
virtual ~monitor_t()
|
||||
{
|
||||
if (socketPtr)
|
||||
zmq_socket_monitor(socketPtr, ZMQ_NULLPTR, 0);
|
||||
|
||||
if (monitor_socket)
|
||||
zmq_close(monitor_socket);
|
||||
close();
|
||||
}
|
||||
|
||||
|
||||
#ifdef ZMQ_HAS_RVALUE_REFS
|
||||
monitor_t(monitor_t &&rhs) ZMQ_NOTHROW : socketPtr(rhs.socketPtr),
|
||||
monitor_socket(rhs.monitor_socket)
|
||||
@@ -837,7 +832,15 @@ class monitor_t
|
||||
rhs.monitor_socket = ZMQ_NULLPTR;
|
||||
}
|
||||
|
||||
socket_t &operator=(socket_t &&rhs) ZMQ_DELETED_FUNCTION;
|
||||
monitor_t &operator=(monitor_t &&rhs) ZMQ_NOTHROW
|
||||
{
|
||||
close();
|
||||
socketPtr = ZMQ_NULLPTR;
|
||||
monitor_socket = ZMQ_NULLPTR;
|
||||
std::swap(socketPtr, rhs.socketPtr);
|
||||
std::swap(monitor_socket, rhs.monitor_socket);
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1113,6 +1116,15 @@ class monitor_t
|
||||
|
||||
void *socketPtr;
|
||||
void *monitor_socket;
|
||||
|
||||
void close() ZMQ_NOTHROW
|
||||
{
|
||||
if (socketPtr)
|
||||
zmq_socket_monitor(socketPtr, ZMQ_NULLPTR, 0);
|
||||
|
||||
if (monitor_socket)
|
||||
zmq_close(monitor_socket);
|
||||
}
|
||||
};
|
||||
|
||||
#if defined(ZMQ_BUILD_DRAFT_API) && defined(ZMQ_CPP11) && defined(ZMQ_HAVE_POLLER)
|
||||
|
Reference in New Issue
Block a user