Skip to content

Commit

Permalink
Connection: Fix deadlock in debug mode (#9550)
Browse files Browse the repository at this point in the history
  • Loading branch information
SmallJoker committed Mar 26, 2020
1 parent f7c7353 commit a099875
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions src/network/connection.cpp
Expand Up @@ -41,17 +41,23 @@ namespace con
/* defines used for debugging and profiling */
/******************************************************************************/
#ifdef NDEBUG
#define LOG(a) a
#define PROFILE(a)
#define LOG(a) a
#define PROFILE(a)
#else
/* this mutex is used to achieve log message consistency */
std::mutex log_message_mutex;
#define LOG(a) \
{ \
MutexAutoLock loglock(log_message_mutex); \
a; \
}
#define PROFILE(a) a
#if 0
/* this mutex is used to achieve log message consistency */
std::mutex log_message_mutex;
#define LOG(a) \
{ \
MutexAutoLock loglock(log_message_mutex); \
a; \
}
#else
// Prevent deadlocks until a solution is found after 5.2.0 (TODO)
#define LOG(a) a
#endif

#define PROFILE(a) a
#endif

#define PING_TIMEOUT 5.0
Expand Down Expand Up @@ -1073,6 +1079,10 @@ bool UDPPeer::processReliableSendCommand(
FATAL_ERROR_IF(!successfully_put_back_sequence_number, "error");
}

// DO NOT REMOVE n_queued! It avoids a deadlock of async locked
// 'log_message_mutex' and 'm_list_mutex'.
u32 n_queued = channels[c.channelnum].outgoing_reliables_sent.size();

LOG(dout_con<<m_connection->getDesc()
<< " Windowsize exceeded on reliable sending "
<< c.data.getSize() << " bytes"
Expand All @@ -1081,7 +1091,7 @@ bool UDPPeer::processReliableSendCommand(
<< std::endl << "\t\tgot at most : "
<< packets_available << " packets"
<< std::endl << "\t\tpackets queued : "
<< channels[c.channelnum].outgoing_reliables_sent.size()
<< n_queued
<< std::endl);

return false;
Expand Down

0 comments on commit a099875

Please sign in to comment.