mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 08:41:16 +00:00
Avoid deadlock in FairMQChannel operator=, handle self-assignment
This commit is contained in:
parent
692ec4e997
commit
9f8a3553ba
|
@ -133,9 +133,15 @@ FairMQChannel::FairMQChannel(const FairMQChannel& chan, const string& newName)
|
||||||
|
|
||||||
FairMQChannel& FairMQChannel::operator=(const FairMQChannel& chan)
|
FairMQChannel& FairMQChannel::operator=(const FairMQChannel& chan)
|
||||||
{
|
{
|
||||||
|
if (this == &chan) {
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
lock_guard<mutex> lock1(fMtx);
|
// TODO: replace this with std::scoped_lock (c++17)
|
||||||
lock_guard<mutex> lock2(chan.fMtx);
|
lock(fMtx, chan.fMtx);
|
||||||
|
lock_guard<mutex> lock1(fMtx, adopt_lock);
|
||||||
|
lock_guard<mutex> lock2(chan.fMtx, adopt_lock);
|
||||||
|
|
||||||
fTransportFactory = nullptr;
|
fTransportFactory = nullptr;
|
||||||
fTransportType = chan.fTransportType;
|
fTransportType = chan.fTransportType;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user