diff --git a/src/data_transfer.cpp b/src/data_transfer.cpp index b8475555cc7fc07637360e6fe09083e3ad0d9b5e..f3c5221d5adb2dfe93bb0fd6e2cf2e658e7011e5 100644 --- a/src/data_transfer.cpp +++ b/src/data_transfer.cpp @@ -467,10 +467,10 @@ SubOutgoingFileTransfer::emit(DRing::DataTransferEventCode code) const if (code == DRing::DataTransferEventCode::wait_peer_acceptance) { if (timeoutTask_) timeoutTask_->cancel(); - timeoutTask_ = Manager::instance().scheduleTask([this]() { + timeoutTask_ = Manager::instance().scheduleTaskIn([this]() { JAMI_WARN() << "FTP#" << getId() << ": timeout. Cancel"; closeAndEmit(DRing::DataTransferEventCode::timeout_expired); - }, std::chrono::steady_clock::now() + std::chrono::minutes(10)); + }, std::chrono::minutes(10)); } else if (timeoutTask_) { timeoutTask_->cancel(); timeoutTask_.reset(); diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index 944c5eed028992e4b6d18154580ee01e6b138177..c9169b5cdce3cb9578c0575bde19ee7c0404b606 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -2457,12 +2457,11 @@ JamiAccount::replyToIncomingIceMsg(const std::shared_ptr<SIPCall>& call, /*.from_account = */ from_id, /*.from_cert = */ from_cert}); - Manager::instance().scheduleTask( + Manager::instance().scheduleTaskIn( [w = weak(), callId = call->getCallId()]() { if (auto shared = w.lock()) shared->checkPendingCall(callId); - }, - std::chrono::steady_clock::now() + ICE_NEGOTIATION_TIMEOUT); + }, ICE_NEGOTIATION_TIMEOUT); } void @@ -3220,7 +3219,7 @@ JamiAccount::sendTextMessage(const std::string& to, }); // Timeout cleanup - Manager::instance().scheduleTask( + Manager::instance().scheduleTaskIn( [w = weak(), confirm, to, token]() { std::unique_lock<std::mutex> l(confirm->lock); if (not confirm->replied) { @@ -3235,8 +3234,7 @@ JamiAccount::sendTextMessage(const std::string& to, this_->messageEngine_.onMessageSent(to, token, false); } } - }, - std::chrono::steady_clock::now() + std::chrono::minutes(1)); + }, std::chrono::minutes(1)); } void diff --git a/src/manager.cpp b/src/manager.cpp index 2f1520bf2e345f4537658982295ebaf53199b8d6..413cd370377d9e10b834a16fbfd1cecb440cb9c6 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -1683,6 +1683,12 @@ Manager::scheduleTask(std::function<void()>&& task, std::chrono::steady_clock::t return pimpl_->scheduler_.schedule(std::move(task), when); } +std::shared_ptr<Task> Manager::scheduleTaskIn(std::function<void()>&& task, + std::chrono::steady_clock::duration timeout) +{ + return pimpl_->scheduler_.scheduleIn(std::move(task), timeout); +} + // Must be invoked periodically by a timer from the main event loop void Manager::pollEvents() diff --git a/src/manager.h b/src/manager.h index 741673dc4a18746e341651d230b3bc914af64045..db7420e28bd3802b606d83f8068bd9dac188c50e 100644 --- a/src/manager.h +++ b/src/manager.h @@ -893,6 +893,8 @@ public: void addTask(std::function<bool()>&& task); std::shared_ptr<Task> scheduleTask(std::function<void()>&& task, std::chrono::steady_clock::time_point when); + std::shared_ptr<Task> scheduleTaskIn(std::function<void()>&& task, + std::chrono::steady_clock::duration timeout); std::map<std::string, std::string> getNearbyPeers(const std::string& accountID);