- Proper process termination:

if interrupted with CTRL+C blocking socket calls will return with -1. Each device should call FairMQDevice::Shutdown() before ending the running state to close open sockets, otherwise the interrupt call itself will block.

- FIX: Update number of received messages for FairMQFileSink.
- Add ability to poll on outputs for FairMQPoller.
This commit is contained in:
Alexey Rybalchenko
2014-08-12 09:11:51 +02:00
committed by Mohammad Al-Turany
parent 8cd120aef4
commit 0a610926a1
23 changed files with 236 additions and 208 deletions

View File

@@ -68,12 +68,14 @@ void FairMQBenchmarkSampler::Run()
try {
rateLogger.interrupt();
resetEventCounter.interrupt();
rateLogger.join();
resetEventCounter.interrupt();
resetEventCounter.join();
} catch(boost::thread_resource_error& e) {
LOG(ERROR) << e.what();
}
FairMQDevice::Shutdown();
}
void FairMQBenchmarkSampler::ResetEventCounter()

View File

@@ -30,17 +30,17 @@ void FairMQBuffer::Run()
boost::thread rateLogger(boost::bind(&FairMQDevice::LogSocketRates, this));
bool received = false;
int received = 0;
while (fState == RUNNING)
{
FairMQMessage* msg = fTransportFactory->CreateMessage();
received = fPayloadInputs->at(0)->Receive(msg);
if (received)
if (received > 0)
{
fPayloadOutputs->at(0)->Send(msg);
received = false;
received = 0;
}
delete msg;
@@ -52,6 +52,8 @@ void FairMQBuffer::Run()
} catch(boost::thread_resource_error& e) {
LOG(ERROR) << e.what();
}
FairMQDevice::Shutdown();
}
FairMQBuffer::~FairMQBuffer()

View File

@@ -35,7 +35,7 @@ void FairMQMerger::Run()
FairMQPoller* poller = fTransportFactory->CreatePoller(*fPayloadInputs);
bool received = false;
int received = 0;
while (fState == RUNNING)
{
@@ -49,10 +49,10 @@ void FairMQMerger::Run()
{
received = fPayloadInputs->at(i)->Receive(msg);
}
if (received)
if (received > 0)
{
fPayloadOutputs->at(0)->Send(msg);
received = false;
received = 0;
}
}
@@ -67,4 +67,6 @@ void FairMQMerger::Run()
} catch(boost::thread_resource_error& e) {
LOG(ERROR) << e.what();
}
FairMQDevice::Shutdown();
}

View File

@@ -34,15 +34,15 @@ void FairMQProxy::Run()
FairMQMessage* msg = fTransportFactory->CreateMessage();
size_t bytes_received = 0;
int received = 0;
while (fState == RUNNING)
{
bytes_received = fPayloadInputs->at(0)->Receive(msg);
if (bytes_received)
received = fPayloadInputs->at(0)->Receive(msg);
if (received > 0)
{
fPayloadOutputs->at(0)->Send(msg);
bytes_received = 0;
received = 0;
}
}
@@ -54,4 +54,6 @@ void FairMQProxy::Run()
} catch(boost::thread_resource_error& e) {
LOG(ERROR) << e.what();
}
FairMQDevice::Shutdown();
}

View File

@@ -28,13 +28,13 @@ void FairMQSink::Run()
boost::thread rateLogger(boost::bind(&FairMQDevice::LogSocketRates, this));
size_t bytes_received = 0;
int received = 0;
while (fState == RUNNING)
{
FairMQMessage* msg = fTransportFactory->CreateMessage();
bytes_received = fPayloadInputs->at(0)->Receive(msg);
received = fPayloadInputs->at(0)->Receive(msg);
delete msg;
}
@@ -45,6 +45,8 @@ void FairMQSink::Run()
} catch(boost::thread_resource_error& e) {
LOG(ERROR) << e.what();
}
FairMQDevice::Shutdown();
}
FairMQSink::~FairMQSink()

View File

@@ -32,7 +32,7 @@ void FairMQSplitter::Run()
boost::thread rateLogger(boost::bind(&FairMQDevice::LogSocketRates, this));
bool received = false;
int received = 0;
int direction = 0;
while (fState == RUNNING)
@@ -41,7 +41,7 @@ void FairMQSplitter::Run()
received = fPayloadInputs->at(0)->Receive(msg);
if (received)
if (received > 0)
{
fPayloadOutputs->at(direction)->Send(msg);
direction++;
@@ -49,7 +49,7 @@ void FairMQSplitter::Run()
{
direction = 0;
}
received = false;
received = 0;
}
delete msg;
@@ -61,4 +61,6 @@ void FairMQSplitter::Run()
} catch(boost::thread_resource_error& e) {
LOG(ERROR) << e.what();
}
FairMQDevice::Shutdown();
}