]> git.tdb.fi Git - builder.git/blob - source/internaltask.cpp
Fix a race condition
[builder.git] / source / internaltask.cpp
1 #include "internaltask.h"
2
3 InternalTask::InternalTask(Worker *w):
4         worker(w)
5 { }
6
7 InternalTask::~InternalTask()
8 {
9         worker->join();
10         delete worker;
11 }
12
13 void InternalTask::start()
14 {
15         worker->launch();
16 }
17
18 Task::Status InternalTask::check()
19 {
20         Status result = worker->get_status();
21         if(result!=RUNNING)
22                 signal_finished.emit(result==SUCCESS);
23         return result;
24 }
25
26 Task::Status InternalTask::wait()
27 {
28         Status result;
29         while((result = check())==RUNNING) ;
30         return result;
31 }
32
33
34 InternalTask::Worker::Worker():
35         status(RUNNING)
36 { }