Skip to content

Commit 95046f7

Browse files
committed
fixed worker pool on exit and added pause funciton to jobqueue
1 parent 053253d commit 95046f7

4 files changed

Lines changed: 25 additions & 11 deletions

File tree

src/DataModelBase/JobQueue.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ JobQueue::~JobQueue(){
3434

3535
bool JobQueue::AddJob(Job* job){
3636

37-
if(job!=0 && job->func!=0){
37+
if(job!=0 && job->func!=0 && !pause){
3838
job->m_complete=false;
3939
job->m_in_progress=false;
4040
job->m_failed=false;

src/DataModelBase/JobQueue.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,15 @@ namespace ToolFramework{
5252
void Print();
5353
void ClearStats();
5454
void Clear();
55-
55+
56+
bool pause =false;
5657

5758
private:
5859

5960
std::queue<Job*> m_jobs;
6061
std::mutex m_lock;
6162
std::map<std::string, QueueStats> m_stats;
62-
63+
6364
};
6465

6566
}

src/DataModelBase/Utilities.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,15 @@ bool Utilities::KillThread(Thread_args* &args){
6969
args->kill=true;
7070

7171
pthread_join(args->thread, NULL);
72+
73+
for(std::map<std::string, Thread_args*>::iterator it= Threads.begin(); it!=Threads.end(); it++){
74+
75+
if(it->second == args){
76+
Threads.erase(it->first);
77+
break;
78+
}
79+
80+
}
7281
//delete args;
7382
//args=0;
7483

src/DataModelBase/WorkerPoolManager.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,27 @@ WorkerPoolManager::WorkerPoolManager(JobQueue& job_queue, unsigned int* thread_c
4949

5050
WorkerPoolManager::~WorkerPoolManager() {
5151

52+
m_job_queue->pause = true;
53+
while(m_job_queue->size()){
54+
// printf("job queue size=%u\n",m_job_queue->size());
55+
usleep(10);
56+
}
57+
5258
m_util.KillThread(&m_manager_args);
53-
59+
5460
for (unsigned int i = 0; i < m_manager_args.args.size(); i++){
61+
5562
m_util.KillThread(m_manager_args.args.at(i));
5663
delete m_manager_args.args.at(i);
57-
}
64+
65+
}
5866

5967
m_manager_args.args.clear();
60-
6168
// delete m_util;
6269
// m_util = 0;
6370

6471
ClearStats();
72+
m_job_queue->pause = false;
6573

6674
}
6775

@@ -300,14 +308,10 @@ void WorkerPoolManager::PrintStats(){
300308

301309
void WorkerPoolManager::ClearStats(){
302310

303-
m_job_queue->m_lock.lock();
304311
m_manager_args.stats_mtx.lock();
305-
306-
m_job_queue->ClearStats();
307312
m_manager_args.stats.clear();
308-
309313
m_manager_args.stats_mtx.unlock();
310-
m_job_queue->m_lock.unlock();
311314

315+
m_job_queue->ClearStats();
312316

313317
}

0 commit comments

Comments
 (0)