diff --git a/src/server.cpp b/src/server.cpp index b09ba4df3..78b706336 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2172,7 +2172,7 @@ void Server::SendPlayerSpeed(session_t peer_id, const v3f &added_vel) inline s32 Server::nextSoundId() { s32 free_id = m_playing_sounds_id_last_used; - while (free_id == 0 || m_playing_sounds.find(free_id) != m_playing_sounds.end()) { + do { if (free_id == INT32_MAX) free_id = 0; // signed overflow is undefined else @@ -2180,7 +2180,8 @@ inline s32 Server::nextSoundId() if (free_id == m_playing_sounds_id_last_used) return 0; - } + } while (free_id == 0 || m_playing_sounds.find(free_id) != m_playing_sounds.end()); + m_playing_sounds_id_last_used = free_id; return free_id; } diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 2e272c419..3cd849103 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -1638,11 +1638,11 @@ u32 ServerEnvironment::addParticleSpawner(float exptime) float time = exptime > 0.f ? exptime : PARTICLE_SPAWNER_NO_EXPIRY; u32 free_id = m_particle_spawners_id_last_used; - while (free_id == 0 || m_particle_spawners.find(free_id) != m_particle_spawners.end()) { + do { + free_id++; if (free_id == m_particle_spawners_id_last_used) return 0; // full - free_id++; - } + } while (free_id == 0 || m_particle_spawners.find(free_id) != m_particle_spawners.end()); m_particle_spawners_id_last_used = free_id; m_particle_spawners[free_id] = time;