Fix error messages in LivestatusListener::ServerThreadProc

fixes #8176
This commit is contained in:
Gunnar Beutner 2015-01-09 09:53:43 +01:00
parent 0eb6e174c8
commit 0d4e92015c
2 changed files with 18 additions and 12 deletions

View File

@ -81,8 +81,8 @@ void LivestatusListener::Start(void)
m_Listener = socket;
boost::thread thread(boost::bind(&LivestatusListener::ServerThreadProc, this, socket));
thread.detach();
m_Thread = boost::thread(boost::bind(&LivestatusListener::ServerThreadProc, this));
Log(LogInformation, "LivestatusListener")
<< "Created TCP socket listening on host '" << GetBindHost() << "' port '" << GetBindPort() << "'.";
}
@ -109,8 +109,8 @@ void LivestatusListener::Start(void)
m_Listener = socket;
boost::thread thread(boost::bind(&LivestatusListener::ServerThreadProc, this, socket));
thread.detach();
m_Thread = boost::thread(boost::bind(&LivestatusListener::ServerThreadProc, this));
Log(LogInformation, "LivestatusListener")
<< "Created UNIX socket in '" << GetSocketPath() << "'.";
#else
@ -126,6 +126,9 @@ void LivestatusListener::Stop(void)
DynamicObject::Stop();
m_Listener->Close();
if (m_Thread.joinable())
m_Thread.join();
}
int LivestatusListener::GetClientsConnected(void)
@ -142,19 +145,21 @@ int LivestatusListener::GetConnections(void)
return l_Connections;
}
void LivestatusListener::ServerThreadProc(const Socket::Ptr& server)
void LivestatusListener::ServerThreadProc(void)
{
server->Listen();
m_Listener->Listen();
for (;;) {
try {
Socket::Ptr client = server->Accept();
for (;;) {
Socket::Ptr client = m_Listener->Accept();
Log(LogNotice, "LivestatusListener", "Client connected");
Utility::QueueAsyncCallback(boost::bind(&LivestatusListener::ClientHandler, this, client), LowLatencyScheduler);
}
} catch (std::exception&) {
Log(LogCritical, "ListenerListener", "Cannot accept new connection.");
}
}
m_Listener->Close();
}
void LivestatusListener::ClientHandler(const Socket::Ptr& client)

View File

@ -51,10 +51,11 @@ protected:
virtual void Stop(void);
private:
void ServerThreadProc(const Socket::Ptr& server);
void ServerThreadProc(void);
void ClientHandler(const Socket::Ptr& client);
Socket::Ptr m_Listener;
boost::thread m_Thread;
};
}