Skip to content

Commit 1d1cf00

Browse files
committedJun 24, 2018
Fix rtt >= 0.0f assertion and free_move crash
1 parent 6b72d8d commit 1d1cf00

File tree

3 files changed

+14
-13
lines changed

3 files changed

+14
-13
lines changed
 

‎src/network/connectionthreads.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
11671167

11681168
// a overflow is quite unlikely but as it'd result in major
11691169
// rtt miscalculation we handle it here
1170-
float rtt;
1170+
float rtt = 0.0f;
11711171
if (current_time > p.absolute_send_time) {
11721172
rtt = (current_time - p.absolute_send_time) / 1000.0f;
11731173
} else if (p.totaltime > 0) {
@@ -1176,7 +1176,8 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
11761176

11771177
// Let peer calculate stuff according to it
11781178
// (avg_rtt and resend_timeout)
1179-
dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt);
1179+
if (rtt != 0.0f)
1180+
dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt);
11801181
}
11811182
// put bytes for max bandwidth calculation
11821183
channel->UpdateBytesSent(p.data.getSize(), 1);

‎src/player.cpp

+7-11
Original file line numberDiff line numberDiff line change
@@ -76,22 +76,18 @@ Player::Player(const char *name, IItemDefManager *idef):
7676
hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT;
7777

7878
m_player_settings.readGlobalSettings();
79-
g_settings->registerChangedCallback("free_move", &Player::settingsChangedCallback,
80-
&m_player_settings);
81-
g_settings->registerChangedCallback("fast_move", &Player::settingsChangedCallback,
82-
&m_player_settings);
83-
g_settings->registerChangedCallback("continuous_forward",
79+
// Register player setting callbacks
80+
for (const std::string &name : m_player_settings.setting_names)
81+
g_settings->registerChangedCallback(name,
8482
&Player::settingsChangedCallback, &m_player_settings);
85-
g_settings->registerChangedCallback("always_fly_fast",
86-
&Player::settingsChangedCallback, &m_player_settings);
87-
g_settings->registerChangedCallback("aux1_descends",
88-
&Player::settingsChangedCallback, &m_player_settings);
89-
g_settings->registerChangedCallback(
90-
"noclip", &Player::settingsChangedCallback, &m_player_settings);
9183
}
9284

9385
Player::~Player()
9486
{
87+
// m_player_settings becomes invalid, remove callbacks
88+
for (const std::string &name : m_player_settings.setting_names)
89+
g_settings->deregisterChangedCallback(name,
90+
&Player::settingsChangedCallback, &m_player_settings);
9591
clearHud();
9692
}
9793

‎src/player.h

+4
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ struct PlayerSettings
9393
bool aux1_descends = false;
9494
bool noclip = false;
9595

96+
const std::string setting_names[6] = {
97+
"free_move", "fast_move", "continuous_forward", "always_fly_fast",
98+
"aux1_descends", "noclip"
99+
};
96100
void readGlobalSettings();
97101
};
98102

0 commit comments

Comments
 (0)
Please sign in to comment.