Skip to content

Commit e9e9fd7

Browse files
sapiersapier
sapier
authored and
sapier
committedDec 15, 2013
Replace SimpleThread by JThread now implementing same features
1 parent 9772322 commit e9e9fd7

File tree

9 files changed

+30
-88
lines changed

9 files changed

+30
-88
lines changed
 

Diff for: ‎src/client.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ void * MeshUpdateThread::Thread()
177177

178178
BEGIN_DEBUG_EXCEPTION_HANDLER
179179

180-
while(getRun())
180+
while(!StopRequested())
181181
{
182182
/*// Wait for output queue to flush.
183183
// Allow 2 in queue, this makes less frametime jitter.
@@ -302,9 +302,8 @@ Client::~Client()
302302
m_con.Disconnect();
303303
}
304304

305-
m_mesh_update_thread.setRun(false);
306-
while(m_mesh_update_thread.IsRunning())
307-
sleep_ms(100);
305+
m_mesh_update_thread.Stop();
306+
m_mesh_update_thread.Wait();
308307
while(!m_mesh_update_thread.m_queue_out.empty()) {
309308
MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_front();
310309
delete r.mesh;

Diff for: ‎src/client.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ struct MeshUpdateResult
103103
}
104104
};
105105

106-
class MeshUpdateThread : public SimpleThread
106+
class MeshUpdateThread : public JThread
107107
{
108108
public:
109109

Diff for: ‎src/connection.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout,
556556

557557
Connection::~Connection()
558558
{
559-
stop();
559+
Stop();
560560
// Delete peers
561561
for(std::map<u16, Peer*>::iterator
562562
j = m_peers.begin();
@@ -578,7 +578,7 @@ void * Connection::Thread()
578578
u32 curtime = porting::getTimeMs();
579579
u32 lasttime = curtime;
580580

581-
while(getRun())
581+
while(!StopRequested())
582582
{
583583
BEGIN_DEBUG_EXCEPTION_HANDLER
584584

Diff for: ‎src/connection.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -450,11 +450,11 @@ struct ConnectionEvent
450450
return "CONNEVENT_NONE";
451451
case CONNEVENT_DATA_RECEIVED:
452452
return "CONNEVENT_DATA_RECEIVED";
453-
case CONNEVENT_PEER_ADDED:
453+
case CONNEVENT_PEER_ADDED:
454454
return "CONNEVENT_PEER_ADDED";
455-
case CONNEVENT_PEER_REMOVED:
455+
case CONNEVENT_PEER_REMOVED:
456456
return "CONNEVENT_PEER_REMOVED";
457-
case CONNEVENT_BIND_FAILED:
457+
case CONNEVENT_BIND_FAILED:
458458
return "CONNEVENT_BIND_FAILED";
459459
}
460460
return "Invalid ConnectionEvent";
@@ -544,7 +544,7 @@ struct ConnectionCommand
544544
}
545545
};
546546

547-
class Connection: public SimpleThread
547+
class Connection: public JThread
548548
{
549549
public:
550550
Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6);

Diff for: ‎src/emerge.cpp

+8-17
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
4747
#include "mapgen_math.h"
4848

4949

50-
class EmergeThread : public SimpleThread
50+
class EmergeThread : public JThread
5151
{
5252
public:
5353
Server *m_server;
@@ -61,26 +61,17 @@ class EmergeThread : public SimpleThread
6161
std::queue<v3s16> blockqueue;
6262

6363
EmergeThread(Server *server, int ethreadid):
64-
SimpleThread(),
64+
JThread(),
6565
m_server(server),
6666
map(NULL),
6767
emerge(NULL),
6868
mapgen(NULL),
69+
enable_mapgen_debug_info(false),
6970
id(ethreadid)
7071
{
7172
}
7273

7374
void *Thread();
74-
75-
void trigger()
76-
{
77-
setRun(true);
78-
if(IsRunning() == false)
79-
{
80-
Start();
81-
}
82-
}
83-
8475
bool popBlockEmerge(v3s16 *pos, u8 *flags);
8576
bool getBlockOrStartGen(v3s16 p, MapBlock **b,
8677
BlockMakeData *data, bool allow_generate);
@@ -137,9 +128,9 @@ EmergeManager::EmergeManager(IGameDef *gamedef) {
137128

138129
EmergeManager::~EmergeManager() {
139130
for (unsigned int i = 0; i != emergethread.size(); i++) {
140-
emergethread[i]->setRun(false);
131+
emergethread[i]->Stop();
141132
emergethread[i]->qevent.signal();
142-
emergethread[i]->stop();
133+
emergethread[i]->Wait();
143134
delete emergethread[i];
144135
delete mapgen[i];
145136
}
@@ -261,9 +252,9 @@ Mapgen *EmergeManager::getCurrentMapgen() {
261252
}
262253

263254

264-
void EmergeManager::triggerAllThreads() {
255+
void EmergeManager::startAllThreads() {
265256
for (unsigned int i = 0; i != emergethread.size(); i++)
266-
emergethread[i]->trigger();
257+
emergethread[i]->Start();
267258
}
268259

269260

@@ -499,7 +490,7 @@ void *EmergeThread::Thread() {
499490
mapgen = emerge->mapgen[id];
500491
enable_mapgen_debug_info = emerge->mapgen_debug_info;
501492

502-
while (getRun())
493+
while (!StopRequested())
503494
try {
504495
if (!popBlockEmerge(&p, &flags)) {
505496
qevent.wait();

Diff for: ‎src/emerge.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class EmergeManager : public IBackgroundBlockEmerger {
119119
Mapgen *createMapgen(std::string mgname, int mgid,
120120
MapgenParams *mgparams);
121121
MapgenParams *createMapgenParams(std::string mgname);
122-
void triggerAllThreads();
122+
void startAllThreads();
123123
bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate);
124124

125125
void registerMapgen(std::string name, MapgenFactory *mgfactory);

Diff for: ‎src/httpfetch.cpp

+4-7
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ struct HTTPFetchOngoing
319319
}
320320
};
321321

322-
class CurlFetchThread : public SimpleThread
322+
class CurlFetchThread : public JThread
323323
{
324324
protected:
325325
enum RequestType {
@@ -539,7 +539,6 @@ class CurlFetchThread : public SimpleThread
539539

540540
void * Thread()
541541
{
542-
ThreadStarted();
543542
log_register_thread("CurlFetchThread");
544543
DSTACK(__FUNCTION_NAME);
545544

@@ -553,7 +552,7 @@ class CurlFetchThread : public SimpleThread
553552

554553
assert(m_all_ongoing.empty());
555554

556-
while (getRun()) {
555+
while (!StopRequested()) {
557556
BEGIN_DEBUG_EXCEPTION_HANDLER
558557

559558
/*
@@ -641,9 +640,9 @@ void httpfetch_cleanup()
641640
{
642641
verbosestream<<"httpfetch_cleanup: cleaning up"<<std::endl;
643642

644-
g_httpfetch_thread->setRun(false);
643+
g_httpfetch_thread->Stop();
645644
g_httpfetch_thread->requestWakeUp();
646-
g_httpfetch_thread->stop();
645+
g_httpfetch_thread->Wait();
647646
delete g_httpfetch_thread;
648647

649648
curl_global_cleanup();
@@ -652,8 +651,6 @@ void httpfetch_cleanup()
652651
void httpfetch_async(const HTTPFetchRequest &fetchrequest)
653652
{
654653
g_httpfetch_thread->requestFetch(fetchrequest);
655-
if (!g_httpfetch_thread->IsRunning())
656-
g_httpfetch_thread->Start();
657654
}
658655

659656
static void httpfetch_request_clear(unsigned long caller)

Diff for: ‎src/server.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ class ClientNotFoundException : public BaseException
7373
{}
7474
};
7575

76-
class ServerThread : public SimpleThread
76+
class ServerThread : public JThread
7777
{
7878
Server *m_server;
7979

8080
public:
8181

8282
ServerThread(Server *server):
83-
SimpleThread(),
83+
JThread(),
8484
m_server(server)
8585
{
8686
}
@@ -98,7 +98,7 @@ void * ServerThread::Thread()
9898

9999
BEGIN_DEBUG_EXCEPTION_HANDLER
100100

101-
while(getRun())
101+
while(!StopRequested())
102102
{
103103
try{
104104
//TimeTaker timer("AsyncRunStep() + Receive()");
@@ -963,14 +963,13 @@ void Server::start(unsigned short port)
963963
infostream<<"Starting server on port "<<port<<"..."<<std::endl;
964964

965965
// Stop thread if already running
966-
m_thread->stop();
966+
m_thread->Stop();
967967

968968
// Initialize connection
969969
m_con.SetTimeoutMs(30);
970970
m_con.Serve(port);
971971

972972
// Start thread
973-
m_thread->setRun(true);
974973
m_thread->Start();
975974

976975
// ASCII art for the win!
@@ -993,9 +992,9 @@ void Server::stop()
993992
infostream<<"Server: Stopping and waiting threads"<<std::endl;
994993

995994
// Stop threads (set run=false first so both start stopping)
996-
m_thread->setRun(false);
995+
m_thread->Stop();
997996
//m_emergethread.setRun(false);
998-
m_thread->stop();
997+
m_thread->Wait();
999998
//m_emergethread.stop();
1000999

10011000
infostream<<"Server: Threads stopped"<<std::endl;
@@ -1682,7 +1681,7 @@ void Server::AsyncRunStep()
16821681
{
16831682
counter = 0.0;
16841683

1685-
m_emerge->triggerAllThreads();
1684+
m_emerge->startAllThreads();
16861685

16871686
// Update m_enable_rollback_recording here too
16881687
m_enable_rollback_recording =

Diff for: ‎src/util/thread.h

-44
Original file line numberDiff line numberDiff line change
@@ -59,53 +59,9 @@ class MutexedVariable
5959
JMutex m_mutex;
6060
};
6161

62-
/*
63-
A base class for simple background thread implementation
64-
*/
65-
66-
class SimpleThread : public JThread
67-
{
68-
bool run;
69-
JMutex run_mutex;
70-
71-
public:
72-
73-
SimpleThread():
74-
JThread(),
75-
run(true)
76-
{
77-
}
78-
79-
virtual ~SimpleThread()
80-
{}
81-
82-
virtual void * Thread() = 0;
83-
84-
bool getRun()
85-
{
86-
JMutexAutoLock lock(run_mutex);
87-
return run;
88-
}
89-
void setRun(bool a_run)
90-
{
91-
JMutexAutoLock lock(run_mutex);
92-
run = a_run;
93-
}
94-
95-
void stop()
96-
{
97-
setRun(false);
98-
while(IsRunning())
99-
sleep_ms(100);
100-
}
101-
};
102-
10362
/*
10463
A single worker thread - multiple client threads queue framework.
10564
*/
106-
107-
108-
10965
template<typename Key, typename T, typename Caller, typename CallerData>
11066
class GetResult
11167
{

0 commit comments

Comments
 (0)
Please sign in to comment.