Skip to content

Commit 48a7298

Browse files
authored
Merge pull request #45097 from smorovic/141x-fix-contention
(DAQ) fix lock contention in source
2 parents 2ec2d68 + 46c71e0 commit 48a7298

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

EventFilter/Utilities/src/DAQSource.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1075,12 +1075,13 @@ void DAQSource::readWorker(unsigned int tid) {
10751075
workerPool_.push(tid);
10761076

10771077
if (init) {
1078-
std::unique_lock<std::mutex> lk(startupLock_);
1078+
std::unique_lock<std::mutex> lks(startupLock_);
10791079
init = false;
10801080
startupCv_.notify_one();
10811081
}
10821082
cvWakeup_.notify_all();
10831083
cvReader_[tid]->wait(lk);
1084+
lk.unlock();
10841085

10851086
if (thread_quit_signal[tid])
10861087
return;

EventFilter/Utilities/src/EvFDaqDirector.cc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <unistd.h>
2525
#include <cstdio>
2626
#include <boost/algorithm/string.hpp>
27+
#include <fmt/printf.h>
2728

2829
//using boost::asio::ip::tcp;
2930

@@ -1550,6 +1551,7 @@ namespace evf {
15501551
int maxLS) {
15511552
EvFDaqDirector::FileStatus fileStatus = noFile;
15521553
serverError = false;
1554+
std::string dest = fmt::sprintf(" on connection to %s:%s", fileBrokerHost_, fileBrokerPort_);
15531555

15541556
boost::system::error_code ec;
15551557
try {
@@ -1559,7 +1561,7 @@ namespace evf {
15591561
boost::asio::connect(*socket_, *endpoint_iterator_, ec);
15601562

15611563
if (ec) {
1562-
edm::LogWarning("EvFDaqDirector") << "boost::asio::connect error -:" << ec;
1564+
edm::LogWarning("EvFDaqDirector") << "boost::asio::connect error -:" << ec << dest;
15631565
serverError = true;
15641566
break;
15651567
}
@@ -1582,25 +1584,25 @@ namespace evf {
15821584
boost::asio::write(*socket_, request, ec);
15831585
if (ec) {
15841586
if (fileBrokerKeepAlive_ && ec == boost::asio::error::connection_reset) {
1585-
edm::LogInfo("EvFDaqDirector") << "reconnecting socket on received connection_reset";
1587+
edm::LogInfo("EvFDaqDirector") << "reconnecting socket on received connection_reset" << dest;
15861588
//we got disconnected, try to reconnect to the server before writing the request
15871589
boost::asio::connect(*socket_, *endpoint_iterator_, ec);
15881590
if (ec) {
1589-
edm::LogWarning("EvFDaqDirector") << "boost::asio::connect error -:" << ec;
1591+
edm::LogWarning("EvFDaqDirector") << "boost::asio::connect error -:" << ec << dest;
15901592
serverError = true;
15911593
break;
15921594
}
15931595
continue;
15941596
}
1595-
edm::LogWarning("EvFDaqDirector") << "boost::asio::write error -:" << ec;
1597+
edm::LogWarning("EvFDaqDirector") << "boost::asio::write error -:" << ec << dest;
15961598
serverError = true;
15971599
break;
15981600
}
15991601

16001602
boost::asio::streambuf response;
16011603
boost::asio::read_until(*socket_, response, "\r\n", ec);
16021604
if (ec) {
1603-
edm::LogWarning("EvFDaqDirector") << "boost::asio::read_until error -:" << ec;
1605+
edm::LogWarning("EvFDaqDirector") << "boost::asio::read_until error -:" << ec << dest;
16041606
serverError = true;
16051607
break;
16061608
}
@@ -1769,7 +1771,7 @@ namespace evf {
17691771
while (boost::asio::read(*socket_, response, boost::asio::transfer_at_least(1), ec)) {
17701772
}
17711773
if (ec != boost::asio::error::eof) {
1772-
edm::LogWarning("EvFDaqDirector") << "boost::asio::read_until error -:" << ec;
1774+
edm::LogWarning("EvFDaqDirector") << "boost::asio::read_until error -:" << ec << dest;
17731775
serverError = true;
17741776
}
17751777
}
@@ -1785,19 +1787,19 @@ namespace evf {
17851787
if (!fileBrokerKeepAlive_ && socket_->is_open()) {
17861788
socket_->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
17871789
if (ec) {
1788-
edm::LogWarning("EvFDaqDirector") << "socket shutdown error -:" << ec;
1790+
edm::LogWarning("EvFDaqDirector") << "socket shutdown error -:" << ec << dest;
17891791
}
17901792
socket_->close(ec);
17911793
if (ec) {
1792-
edm::LogWarning("EvFDaqDirector") << "socket close error -:" << ec;
1794+
edm::LogWarning("EvFDaqDirector") << "socket close error -:" << ec << dest;
17931795
}
17941796
}
17951797

17961798
if (serverError) {
17971799
if (socket_->is_open())
17981800
socket_->close(ec);
17991801
if (ec) {
1800-
edm::LogWarning("EvFDaqDirector") << "socket close error -:" << ec;
1802+
edm::LogWarning("EvFDaqDirector") << "socket close error -:" << ec << dest;
18011803
}
18021804
fileStatus = noFile;
18031805
sleep(1); //back-off if error detected

EventFilter/Utilities/src/FedRawDataInputSource.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1300,12 +1300,13 @@ void FedRawDataInputSource::readWorker(unsigned int tid) {
13001300
workerPool_.push(tid);
13011301

13021302
if (init) {
1303-
std::unique_lock<std::mutex> lk(startupLock_);
1303+
std::unique_lock<std::mutex> lks(startupLock_);
13041304
init = false;
13051305
startupCv_.notify_one();
13061306
}
13071307
cvWakeup_.notify_all();
13081308
cvReader_[tid]->wait(lk);
1309+
lk.unlock();
13091310

13101311
if (thread_quit_signal[tid])
13111312
return;

0 commit comments

Comments
 (0)