Merge pull request #432 from or17191/bugfix/socket-move-assignment-not-initializing-ctxptr

Bugfix: socket_t move assignment doesn't initialize ctxptr
This commit is contained in:
Simon Giesecke 2020-09-04 11:33:41 +02:00 committed by GitHub
commit 7efc9b153f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 0 deletions

View File

@ -142,4 +142,19 @@ TEST_CASE("monitor init abort", "[monitor]")
monitor.abort(); monitor.abort();
thread.join(); thread.join();
} }
TEST_CASE("monitor from move assigned socket", "[monitor]")
{
zmq::context_t ctx;
zmq::socket_t sock;
sock = std::move([&ctx] {
zmq::socket_t sock(ctx, ZMQ_DEALER);
return sock;
}());
zmq::monitor_t monitor1;
monitor1.init(sock, "inproc://monitor-client");
// On failure, this test might hang indefinitely instead of immediately
// failing
}
#endif #endif

View File

@ -2103,6 +2103,7 @@ class socket_t : public detail::socket_base
{ {
close(); close();
std::swap(_handle, rhs._handle); std::swap(_handle, rhs._handle);
std::swap(ctxptr, rhs.ctxptr);
return *this; return *this;
} }
#endif #endif
@ -2121,6 +2122,7 @@ class socket_t : public detail::socket_base
int rc = zmq_close(_handle); int rc = zmq_close(_handle);
ZMQ_ASSERT(rc == 0); ZMQ_ASSERT(rc == 0);
_handle = ZMQ_NULLPTR; _handle = ZMQ_NULLPTR;
ctxptr = ZMQ_NULLPTR;
} }
void swap(socket_t &other) ZMQ_NOTHROW void swap(socket_t &other) ZMQ_NOTHROW
@ -2143,6 +2145,9 @@ class socket_t : public detail::socket_base
{ {
if (_handle == ZMQ_NULLPTR) if (_handle == ZMQ_NULLPTR)
throw error_t(); throw error_t();
if (ctxptr == ZMQ_NULLPTR)
throw error_t();
} }
}; };