Coloring compiler's output
[platform/core/security/vasum.git] / common / epoll / glib-poll-dispatcher.cpp
1 /*
2  *  Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Contact: Piotr Bartosiewicz <p.bartosiewi@partner.samsung.com>
5  *
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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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
17  */
18
19 /**
20  * @file
21  * @author  Piotr Bartosiewicz (p.bartosiewi@partner.samsung.com)
22  * @brief   glib epoll dispatcher
23  */
24
25 #include "config.hpp"
26 #include "epoll/glib-poll-dispatcher.hpp"
27 #include "utils/callback-wrapper.hpp"
28
29 namespace vasum {
30 namespace epoll {
31
32 GlibPollDispatcher::GlibPollDispatcher()
33 {
34     mChannel = g_io_channel_unix_new(mPoll.getPollFD());
35
36     auto dispatchCallback = [this]() {
37         mPoll.dispatchIteration(0);
38     };
39
40     auto cCallback = [](GIOChannel*, GIOCondition, gpointer data) -> gboolean {
41         utils::getCallbackFromPointer<decltype(dispatchCallback)>(data)();
42         return TRUE;
43     };
44
45     mWatchId = g_io_add_watch_full(mChannel,
46                                    G_PRIORITY_DEFAULT,
47                                    G_IO_IN,
48                                    cCallback,
49                                    utils::createCallbackWrapper(dispatchCallback, mGuard.spawn()),
50                                    &utils::deleteCallbackWrapper<decltype(dispatchCallback)>);
51 }
52
53 GlibPollDispatcher::~GlibPollDispatcher()
54 {
55     g_source_remove(mWatchId);
56     g_io_channel_unref(mChannel);
57     // mGuard destructor will wait for full unregister of dispatchCallback
58 }
59
60 EventPoll& GlibPollDispatcher::getPoll()
61 {
62     return mPoll;
63 }
64
65 } // namespace epoll
66 } // namespace vasum