From 2ef0a8af973c3b6bdae5a87858af55c3e8b96e1c Mon Sep 17 00:00:00 2001
From: Olivier Dion <olivier.dion@savoirfairelinux.com>
Date: Fri, 10 Dec 2021 13:08:45 -0500
Subject: [PATCH] manager: Add execution context to scheduled executor

Change-Id: Icedfd7e3cd3765cf900e1fac26ad0106ba8a5cb3
---
 src/manager.cpp | 16 ++++++++++------
 src/manager.h   | 23 ++++++++++++++++++-----
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/src/manager.cpp b/src/manager.cpp
index 09b24dab0d..c4e35c8cce 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -1657,21 +1657,25 @@ Manager::ioContext() const
 }
 
 void
-Manager::addTask(std::function<bool()>&& task)
+Manager::addTask(std::function<bool()>&& task, const char* filename, uint32_t linum)
 {
-    pimpl_->scheduler_.scheduleAtFixedRate(std::move(task), std::chrono::milliseconds(30));
+    pimpl_->scheduler_.scheduleAtFixedRate(std::move(task), std::chrono::milliseconds(30),
+                                           filename, linum);
 }
 
 std::shared_ptr<Task>
-Manager::scheduleTask(std::function<void()>&& task, std::chrono::steady_clock::time_point when)
+Manager::scheduleTask(std::function<void()>&& task, std::chrono::steady_clock::time_point when,
+                      const char* filename, uint32_t linum)
 {
-    return pimpl_->scheduler_.schedule(std::move(task), when);
+    return pimpl_->scheduler_.schedule(std::move(task), when, filename, linum);
 }
 
 std::shared_ptr<Task>
-Manager::scheduleTaskIn(std::function<void()>&& task, std::chrono::steady_clock::duration timeout)
+Manager::scheduleTaskIn(std::function<void()>&& task, std::chrono::steady_clock::duration timeout,
+                        const char* filename, uint32_t linum)
 {
-    return pimpl_->scheduler_.scheduleIn(std::move(task), timeout);
+    return pimpl_->scheduler_.scheduleIn(std::move(task), timeout,
+                                         filename, linum);
 }
 
 // Must be invoked periodically by a timer from the main event loop
diff --git a/src/manager.h b/src/manager.h
index f560e570fe..046dc522ac 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -47,6 +47,8 @@
 #include <string>
 #include <vector>
 
+#include "trace-tools.h"
+
 namespace asio {
 class io_context;
 }
@@ -785,11 +787,19 @@ public:
 
     std::shared_ptr<asio::io_context> ioContext() const;
 
-    void addTask(std::function<bool()>&& task);
+    void addTask(std::function<bool()>&& task,
+                 const char *filename=CURRENT_FILENAME(),
+                 uint32_t linum=CURRENT_LINE());
+
     std::shared_ptr<Task> scheduleTask(std::function<void()>&& task,
-                                       std::chrono::steady_clock::time_point when);
+                                       std::chrono::steady_clock::time_point when,
+                                       const char* filename=CURRENT_FILENAME(),
+                                       uint32_t linum=CURRENT_LINE());
+
     std::shared_ptr<Task> scheduleTaskIn(std::function<void()>&& task,
-                                         std::chrono::steady_clock::duration timeout);
+                                         std::chrono::steady_clock::duration timeout,
+                                         const char* filename=CURRENT_FILENAME(),
+                                         uint32_t linum=CURRENT_LINE());
 
     std::map<std::string, std::string> getNearbyPeers(const std::string& accountID);
 
@@ -884,9 +894,12 @@ private:
 // Helper to install a callback to be called once by the main event loop
 template<typename Callback>
 static void
-runOnMainThread(Callback&& cb)
+runOnMainThread(Callback&& cb,
+                const char *filename=CURRENT_FILENAME(),
+                uint32_t linum=CURRENT_LINE())
 {
-    Manager::instance().scheduler().run([cb = std::forward<Callback>(cb)]() mutable { cb(); });
+    Manager::instance().scheduler().run([cb = std::forward<Callback>(cb)]() mutable { cb(); },
+                                        filename, linum);
 }
 
 } // namespace jami
-- 
GitLab