mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-13 18:55:10 +01:00
Socket with no owner objects is deallocated immediately
Till now the deallocation of such socket was delayed till zmq_term() thus creating a "leak". Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
parent
c22e52737a
commit
d4e418f5f4
@ -96,12 +96,13 @@ void zmq::reaper_t::process_stop ()
|
||||
|
||||
void zmq::reaper_t::process_reap (socket_base_t *socket_)
|
||||
{
|
||||
// Start termination of associated I/O object hierarchy.
|
||||
socket_->terminate ();
|
||||
|
||||
// Add the socket to the poller.
|
||||
socket_->start_reaping (poller);
|
||||
|
||||
// Start termination of associated I/O object hierarchy.
|
||||
socket_->terminate ();
|
||||
socket_->check_destroy ();
|
||||
|
||||
++sockets;
|
||||
}
|
||||
|
||||
|
@ -754,7 +754,21 @@ void zmq::socket_base_t::in_event ()
|
||||
// Process any commands from other threads/sockets that may be available
|
||||
// at the moment. Ultimately, socket will be destroyed.
|
||||
process_commands (false, false);
|
||||
check_destroy ();
|
||||
}
|
||||
|
||||
void zmq::socket_base_t::out_event ()
|
||||
{
|
||||
zmq_assert (false);
|
||||
}
|
||||
|
||||
void zmq::socket_base_t::timer_event (int id_)
|
||||
{
|
||||
zmq_assert (false);
|
||||
}
|
||||
|
||||
void zmq::socket_base_t::check_destroy ()
|
||||
{
|
||||
// If the object was already marked as destroyed, finish the deallocation.
|
||||
if (destroyed) {
|
||||
|
||||
@ -771,13 +785,3 @@ void zmq::socket_base_t::in_event ()
|
||||
own_t::process_destroy ();
|
||||
}
|
||||
}
|
||||
|
||||
void zmq::socket_base_t::out_event ()
|
||||
{
|
||||
zmq_assert (false);
|
||||
}
|
||||
|
||||
void zmq::socket_base_t::timer_event (int id_)
|
||||
{
|
||||
zmq_assert (false);
|
||||
}
|
||||
|
@ -97,6 +97,10 @@ namespace zmq
|
||||
void out_event ();
|
||||
void timer_event (int id_);
|
||||
|
||||
// To be called after processing commands or invoking any command
|
||||
// handlers explicitly. If required, it will deallocate the socket.
|
||||
void check_destroy ();
|
||||
|
||||
protected:
|
||||
|
||||
socket_base_t (class ctx_t *parent_, uint32_t tid_);
|
||||
|
Loading…
Reference in New Issue
Block a user