TEST_F(TizenCoreTest, tizen_core_source_destroy_P) {
int ret = tizen_core_source_destroy(source_);
ASSERT_EQ(ret, TIZEN_CORE_ERROR_NONE);
+ source_ = nullptr;
}
TEST_F(TizenCoreTest, tizen_core_source_destroy_N) {
return TIZEN_CORE_ERROR_OUT_OF_MEMORY; // LCOV_EXCL_LINE
}
+ handle->RefSelf();
*task = static_cast<tizen_core_task_h>(handle.get());
} catch (const std::invalid_argument& e) {
_E("Exception occurs. error(%s)", e.what());
auto* handle = static_cast<tizen_base::tizen_core::Task*>(task);
handle->Dispose();
+ handle->UnrefSelf();
return TIZEN_CORE_ERROR_NONE;
}
receiver_(std::move(receiver)),
cb_(std::move(cb)) {
receiver_->ReceiveAsync([=](channel::ChannelObject<T> obj) {
- task_->AddIdleJob([&]() {
+ task_->AddIdleJob([=]() {
cb_(obj);
return false;
});
event_sources_.remove(source);
}
+void Task::RefSelf() { self_ = shared_from_this(); }
+
+void Task::UnrefSelf() { self_.reset(); }
+
template std::shared_ptr<ISource> Task::AddChannel<void*>(
std::shared_ptr<channel::Receiver<void*>> receiver,
std::function<void(const channel::ChannelObject<void*>&)> cb);
void AddEventSource(std::shared_ptr<ISource> source);
void RemoveEventSource(std::shared_ptr<ISource> source);
+ void RefSelf();
+ void UnrefSelf();
+
private:
void ThreadLoop();
bool idle_entered_ = false;
std::list<std::shared_ptr<ISource>> event_sources_;
mutable std::recursive_mutex mutex_;
+ std::shared_ptr<Task> self_;
};
} // namespace tizen_core