From bf22184d6e16f21b9001322aad1bf8f6dbaa372b Mon Sep 17 00:00:00 2001 From: Jozef Behran Date: Tue, 13 Aug 2019 20:02:50 +0200 Subject: [PATCH] Fix unnecessary exception use in 3 more methods (#8791) * Fix unnecessary exception use in Server::SendBlocks The code in this method calls getBlockNoCreate and then messes around with try...catch to skip blocks which are not in the memory. Additionally, it repeatedly calls m_env.getMap() inside this loop. Speed the code up by extracting the m_env.getMap() out of the loop and getting rid of the try...catch. * Fix unnecessary exception use in Server::SendBlock Another unnecessary try...catch is slowing down Server::SendBlock. Remove that to speed it up and get a nice side effect of simplifying the code in question. * Fix unnecessary exception use in MMVManip::initialEmerge Remove another unneeded exception usage from MMVManip::initialEmerge to speed that code up and simplify it but be careful to not remove the braces as there is a TimeTaker in use there. --- src/map.cpp | 9 ++------- src/server.cpp | 14 +++++--------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 2ccd6fd1c..ebf443818 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2214,20 +2214,15 @@ void MMVManip::initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max, continue; bool block_data_inexistent = false; - try { TimeTaker timer2("emerge load", &emerge_load_time); - block = m_map->getBlockNoCreate(p); - if(block->isDummy()) + block = m_map->getBlockNoCreateNoEx(p); + if (!block || block->isDummy()) block_data_inexistent = true; else block->copyTo(*this); } - catch(InvalidPositionException &e) - { - block_data_inexistent = true; - } if(block_data_inexistent) { diff --git a/src/server.cpp b/src/server.cpp index 386817c8f..82c83e47d 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2287,16 +2287,15 @@ void Server::SendBlocks(float dtime) g_settings->getU32("max_simultaneous_block_sends_per_client") / 4 + 1; ScopeProfiler sp(g_profiler, "Server::SendBlocks(): Send to clients"); + Map &map = m_env->getMap(); + for (const PrioritySortedBlockTransfer &block_to_send : queue) { if (total_sending >= max_blocks_to_send) break; - MapBlock *block = nullptr; - try { - block = m_env->getMap().getBlockNoCreate(block_to_send.pos); - } catch (const InvalidPositionException &e) { + MapBlock *block = map.getBlockNoCreateNoEx(block_to_send.pos); + if (!block) continue; - } RemoteClient *client = m_clients.lockedGetClientNoEx(block_to_send.peer_id, CS_Active); @@ -2314,10 +2313,7 @@ void Server::SendBlocks(float dtime) bool Server::SendBlock(session_t peer_id, const v3s16 &blockpos) { - MapBlock *block = nullptr; - try { - block = m_env->getMap().getBlockNoCreate(blockpos); - } catch (InvalidPositionException &e) {}; + MapBlock *block = m_env->getMap().getBlockNoCreateNoEx(blockpos); if (!block) return false; -- 2.25.1