Revert "ExternalCommandListener: Use threads per client connection"

This reverts commit accd83693c
This commit is contained in:
Gunnar Beutner 2014-08-20 13:37:06 +02:00
parent f6a7f84ed5
commit dae120beb6
2 changed files with 42 additions and 56 deletions

View File

@ -99,63 +99,50 @@ void ExternalCommandListener::CommandPipeThread(const String& commandPath)
for (;;) {
int fd;
try {
do {
fd = open(commandPath.CStr(), O_RDONLY);
} while (fd < 0 && errno == EINTR);
do {
fd = open(commandPath.CStr(), O_RDONLY);
} while (fd < 0 && errno == EINTR);
if (fd < 0) {
std::ostringstream msgbuf;
msgbuf << "open() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
return;
}
Log(LogNotice, "ExternalCommandListener", "Client connected");
Utility::QueueAsyncCallback(boost::bind(&ExternalCommandListener::ClientHandler, this, commandPath, fd));
} catch (std::exception&) {
Log(LogCritical, "ExternalCommandListener", "Cannot accept new connection.");
if (fd < 0) {
std::ostringstream msgbuf;
msgbuf << "open() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
return;
}
FILE *fp = fdopen(fd, "r");
if (fp == NULL) {
std::ostringstream msgbuf;
msgbuf << "fdopen() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
return;
}
const int linesize = 128 * 1024;
char *line = new char[linesize];
while (fgets(line, linesize, fp) != NULL) {
// remove trailing new-line
while (strlen(line) > 0 &&
(line[strlen(line) - 1] == '\r' || line[strlen(line) - 1] == '\n'))
line[strlen(line) - 1] = '\0';
String command = line;
try {
Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command);
ExternalCommandProcessor::Execute(command);
} catch (const std::exception&) {
std::ostringstream msgbuf;
msgbuf << "External command failed.";
Log(LogWarning, "ExternalCommandListener", msgbuf.str());
}
}
delete line;
fclose(fp);
}
}
void ExternalCommandListener::ClientHandler(const String& commandPath, int fd)
{
FILE *fp = fdopen(fd, "r");
if (fp == NULL) {
std::ostringstream msgbuf;
msgbuf << "fdopen() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
return;
}
const int linesize = 128 * 1024;
char *line = new char[linesize];
while (fgets(line, linesize, fp) != NULL) {
// remove trailing new-line
while (strlen(line) > 0 &&
(line[strlen(line) - 1] == '\r' || line[strlen(line) - 1] == '\n'))
line[strlen(line) - 1] = '\0';
}
String command = line;
try {
Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command);
ExternalCommandProcessor::Execute(command);
} catch (const std::exception&) {
std::ostringstream msgbuf;
msgbuf << "External command failed.";
Log(LogWarning, "ExternalCommandListener", msgbuf.str());
return;
}
delete line;
fclose(fp);
}
#endif /* _WIN32 */

View File

@ -49,7 +49,6 @@ private:
boost::thread m_CommandThread;
void CommandPipeThread(const String& commandPath);
void ClientHandler(const String& commandPath, int fd);
#endif /* _WIN32 */
};