Fix unnecessary exception use in 3 more methods (#8791)
authorJozef Behran <jozuejozef@gmail.com>
Tue, 13 Aug 2019 18:02:50 +0000 (20:02 +0200)
committerSmallJoker <SmallJoker@users.noreply.github.com>
Tue, 13 Aug 2019 18:02:50 +0000 (20:02 +0200)
* 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
src/server.cpp

index 2ccd6fd1c9304671dc26df182f0d0edf9e32a433..ebf44381828a70df607f83212ca034868aeaf2ce 100644 (file)
@@ -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)
                {
index 386817c8f969fd2b517e13dd6bba7cf4992e695b..82c83e47daecd7b7009de65af6a3877cf03818b7 100644 (file)
@@ -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;