2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Piotr Bartosiewicz <p.bartosiewi@partner.samsung.com>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
21 * @author Piotr Bartosiewicz (p.bartosiewi@partner.samsung.com)
22 * @brief glib epoll dispatcher
26 #include "epoll/glib-poll-dispatcher.hpp"
27 #include "utils/callback-wrapper.hpp"
32 GlibPollDispatcher::GlibPollDispatcher()
34 mChannel = g_io_channel_unix_new(mPoll.getPollFD());
36 auto dispatchCallback = [this]() {
37 mPoll.dispatchIteration(0);
40 auto cCallback = [](GIOChannel*, GIOCondition, gpointer data) -> gboolean {
41 utils::getCallbackFromPointer<decltype(dispatchCallback)>(data)();
45 mWatchId = g_io_add_watch_full(mChannel,
49 utils::createCallbackWrapper(dispatchCallback, mGuard.spawn()),
50 &utils::deleteCallbackWrapper<decltype(dispatchCallback)>);
53 GlibPollDispatcher::~GlibPollDispatcher()
55 g_source_remove(mWatchId);
56 g_io_channel_unref(mChannel);
57 // mGuard destructor will wait for full unregister of dispatchCallback
60 EventPoll& GlibPollDispatcher::getPoll()