From b400eddcc4400226c148d2ebd024db5683e2df16 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Sat, 19 Nov 2022 19:35:51 +0100
Subject: [PATCH] scheduler: fix for handling update of active target (priority
 was not updated)

---
 .../components/gaze_scheduler/Scheduler.cpp   | 26 +++++++++----------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/source/armarx/view_selection/components/gaze_scheduler/Scheduler.cpp b/source/armarx/view_selection/components/gaze_scheduler/Scheduler.cpp
index 0ea8d9e..c962db7 100644
--- a/source/armarx/view_selection/components/gaze_scheduler/Scheduler.cpp
+++ b/source/armarx/view_selection/components/gaze_scheduler/Scheduler.cpp
@@ -301,19 +301,8 @@ namespace armarx::view_selection::gaze_scheduler
         {
             std::scoped_lock<std::mutex> targetLock(targetMutex);
 
-            const auto currentTarget = currentTargetBuffer.getUpToDateReadBuffer();
-            // replace the target if it is currently active
-            if (currentTarget.has_value())
-            {
-                if (currentTarget->name == target.name)
-                {
-                    ARMARX_VERBOSE << "Updating active target: " << target.name;
-                    submitControlTarget(target);
-
-                    return;
-                }
-            }
-            // remove target if found in queue
+            // remove target if found in queue 
+            // (otherwise, two targets with the same name but different priorities will be in the queue)
             for (auto it = requestedTargets.cbegin(); it != requestedTargets.cend(); it++)
             {
                 if (it->name == target.name)
@@ -326,7 +315,6 @@ namespace armarx::view_selection::gaze_scheduler
             // multiset automatically ensures order
             requestedTargets.emplace(target);
         }
-        scheduleNextTarget();
     }
 
     void
@@ -343,6 +331,13 @@ namespace armarx::view_selection::gaze_scheduler
         // this will be only used in one of the if-else cases so that they do not
         // influence each other
         auto nextTarget = requestedTargets.cbegin();
+        ARMARX_VERBOSE << "Next target is " << nextTarget->name;
+
+        ARMARX_DEBUG << "Targets in queue";
+        for(const auto& target: requestedTargets)
+        {
+            ARMARX_DEBUG << target;
+        }
 
         const auto currentTarget = currentTargetBuffer.getUpToDateReadBuffer();
 
@@ -441,6 +436,9 @@ namespace armarx::view_selection::gaze_scheduler
                     }
                 }
             }
+
+            scheduleNextTarget();
+
         }
         else
         {
-- 
GitLab