From 32878f85778442846b82f29fbea32cadb935acb0 Mon Sep 17 00:00:00 2001 From: Leonid Beynenson Date: Tue, 22 May 2012 13:24:37 +0000 Subject: [PATCH] Added a check of the DetectionBasedTracker's inner state in the main thread function of this class. This change should fix a multithread bug in the class. --- modules/contrib/src/detection_based_tracker.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/contrib/src/detection_based_tracker.cpp b/modules/contrib/src/detection_based_tracker.cpp index 90392e3..bbf27b8 100644 --- a/modules/contrib/src/detection_based_tracker.cpp +++ b/modules/contrib/src/detection_based_tracker.cpp @@ -241,6 +241,11 @@ void DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); pthread_mutex_lock(&mutex); + if (!isWorking()) {//it is a rare case, but may cause a crash + LOGD("DetectionBasedTracker::SeparateDetectionWork::workcycleObjectDetector() --- go out from the workcycle from inner part of lock just before waiting"); + pthread_mutex_unlock(&mutex); + break; + } CV_Assert(stateThread==STATE_THREAD_WORKING_SLEEPING); pthread_cond_wait(&objectDetectorRun, &mutex); if (isWorking()) { -- 2.7.4