Added a check of the DetectionBasedTracker's inner state in the main thread function...
authorLeonid Beynenson <no@email>
Tue, 22 May 2012 13:24:37 +0000 (13:24 +0000)
committerLeonid Beynenson <no@email>
Tue, 22 May 2012 13:24:37 +0000 (13:24 +0000)
This change should fix a multithread bug in the class.

modules/contrib/src/detection_based_tracker.cpp

index 90392e3..bbf27b8 100644 (file)
@@ -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()) {