Remove LocalClient fd from poll set
The file descriptor registered for the LocalClient instances need to be removed from the worker it was added to when the object is destroyed.
This commit is contained in:
parent
5b0b1666cc
commit
c2283bbff1
@ -44,7 +44,7 @@ LocalClient::~LocalClient()
|
||||
{
|
||||
if (m_state != VC_ERROR)
|
||||
{
|
||||
close(m_sock);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,10 +65,21 @@ bool LocalClient::queue_query(GWBUF* buffer)
|
||||
return my_buf != NULL;
|
||||
}
|
||||
|
||||
void LocalClient::close()
|
||||
{
|
||||
mxs::Worker* worker = mxs::Worker::get_current();
|
||||
ss_dassert(worker);
|
||||
worker->remove_fd(m_sock);
|
||||
::close(m_sock);
|
||||
}
|
||||
|
||||
void LocalClient::error()
|
||||
{
|
||||
close(m_sock);
|
||||
m_state = VC_ERROR;
|
||||
if (m_state != VC_ERROR)
|
||||
{
|
||||
close();
|
||||
m_state = VC_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
void LocalClient::process(uint32_t events)
|
||||
@ -228,7 +239,7 @@ LocalClient* LocalClient::create(MXS_SESSION* session, SERVICE* service)
|
||||
int fd = open_network_socket(MXS_SOCKET_NETWORK, &addr, "127.0.0.1",
|
||||
service->ports->port);
|
||||
|
||||
if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == 0 || errno == EINPROGRESS)
|
||||
if (fd > 0 && (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == 0 || errno == EINPROGRESS))
|
||||
{
|
||||
LocalClient* relay = new (std::nothrow) LocalClient(session, fd);
|
||||
|
||||
@ -242,12 +253,17 @@ LocalClient* LocalClient::create(MXS_SESSION* session, SERVICE* service)
|
||||
}
|
||||
else
|
||||
{
|
||||
relay->m_state = VC_ERROR;
|
||||
delete rval;
|
||||
rval = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (rval == NULL && fd > 0)
|
||||
{
|
||||
::close(fd);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ private:
|
||||
GWBUF* read_complete_packet();
|
||||
void drain_queue();
|
||||
void error();
|
||||
void close();
|
||||
|
||||
/** Client states */
|
||||
enum vc_state
|
||||
|
Loading…
x
Reference in New Issue
Block a user