diff --git a/CometSearch/CometSearchManager.cpp b/CometSearch/CometSearchManager.cpp index c4ceb98c..e9f531b4 100644 --- a/CometSearch/CometSearchManager.cpp +++ b/CometSearch/CometSearchManager.cpp @@ -592,9 +592,11 @@ CometSearchManager::~CometSearchManager() _mapStaticParams.clear(); - if (_tp != NULL) delete _tp; - +#ifndef CRUX // hack to avoid segfault observed on linux Crux-Comet search exit + if (_tp != NULL) + delete _tp; _tp = NULL; +#endif } bool CometSearchManager::InitializeStaticParams() diff --git a/CometSearch/ThreadPool.h b/CometSearch/ThreadPool.h index a8e54572..2a2559f4 100644 --- a/CometSearch/ThreadPool.h +++ b/CometSearch/ThreadPool.h @@ -332,7 +332,7 @@ inline void* threadStart(void* ptr) int i = data->thread_no; ThreadPool* tp = (ThreadPool*)data->tp; bool did_job = false; - while (1) + while (&tp->jobs_) { tp->LOCK(&tp->lock_); @@ -381,7 +381,16 @@ inline void* threadStart(void* ptr) else { //std::cerr << "Thread " << i << " does a job" << std::endl; - job = std::move (tp->jobs_.front ()); + if (&tp->jobs_) + { + job = std::move (tp->jobs_.front ()); + } + else + { + tp->UNLOCK(&tp->lock_); + continue; + } + tp->jobs_.pop_front(); if (!did_job)