]> git.lizzy.rs Git - minetest.git/blobdiff - src/server.h
Fix EmergeThread hang on exit
[minetest.git] / src / server.h
index 29d47337db4eb8e9c724273d065714b83f59ad8a..e92cbb564be20fec08da841d4a055760fa3f4490 100644 (file)
@@ -1,6 +1,6 @@
 /*
-Minetest-c55
-Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -39,6 +39,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "rollback_interface.h" // Needed for rollbackRevertActions()
 #include <list> // Needed for rollbackRevertActions()
 
+#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
+
 struct LuaState;
 typedef struct lua_State lua_State;
 class IWritableItemDefManager;
@@ -47,6 +49,7 @@ class IWritableCraftDefManager;
 class EventManager;
 class PlayerSAO;
 class IRollbackManager;
+class EmergeManager;
 
 class ServerError : public std::exception
 {
@@ -120,11 +123,9 @@ class BlockEmergeQueue
                                If it is, update the peer to it and quit.
                        */
                        core::list<QueuedBlockEmerge*>::Iterator i;
-                       for(i=m_queue.begin(); i!=m_queue.end(); i++)
-                       {
+                       for(i=m_queue.begin(); i!=m_queue.end(); i++) {
                                QueuedBlockEmerge *q = *i;
-                               if(q->pos == pos)
-                               {
+                               if (q->pos == pos) {
                                        q->peer_ids[peer_id] = flags;
                                        return;
                                }
@@ -136,7 +137,7 @@ class BlockEmergeQueue
                */
                QueuedBlockEmerge *q = new QueuedBlockEmerge;
                q->pos = pos;
-               if(peer_id != 0)
+               if (peer_id != 0)
                        q->peer_ids[peer_id] = flags;
                m_queue.push_back(q);
        }
@@ -200,30 +201,6 @@ class ServerThread : public SimpleThread
        void * Thread();
 };
 
-class EmergeThread : public SimpleThread
-{
-       Server *m_server;
-
-public:
-
-       EmergeThread(Server *server):
-               SimpleThread(),
-               m_server(server)
-       {
-       }
-
-       void * Thread();
-
-       void trigger()
-       {
-               setRun(true);
-               if(IsRunning() == false)
-               {
-                       Start();
-               }
-       }
-};
-
 struct PlayerInfo
 {
        u16 id;
@@ -720,6 +697,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        // Some timers
        float m_liquid_transform_timer;
        float m_print_info_timer;
+       float m_masterserver_timer;
        float m_objectdata_timer;
        float m_emergethread_trigger_timer;
        float m_savemap_timer;
@@ -737,6 +715,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        JMutex m_con_mutex;
        // Connected clients (behind the con mutex)
        core::map<u16, RemoteClient*> m_clients;
+       u16 m_clients_number; //for announcing masterserver
 
        // Bann checking
        BanManager m_banmanager;
@@ -783,9 +762,9 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        // The server mainly operates in this thread
        ServerThread m_thread;
        // This thread fetches and generates map
-       EmergeThread m_emergethread;
+       //EmergeThread m_emergethread;
        // Queue of block coordinates to be processed by the emerge thread
-       BlockEmergeQueue m_emerge_queue;
+       //BlockEmergeQueue m_emerge_queue;
 
        /*
                Time related stuff