From: Daniel Wagner <[email protected]>

When a new service is selected, assign the session to the corresponding
cgroup.
---
 src/session.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/session.c b/src/session.c
index a60dc98..e84e5c3 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1071,6 +1071,36 @@ static void select_service(struct session_info *info,
                select_offline_service(info, entry);
 }
 
+static void update_route(struct connman_session *session)
+{
+       struct session_info *info = session->info;
+       struct session_info *info_last = session->info_last;
+       int index = 0;
+
+       DBG("session %p", session);
+
+       if (session->pid == 0)
+               return;
+
+       if (info != NULL) {
+               if (info->entry != NULL) {
+                       index = __connman_service_get_index(
+                                       info->entry->service);
+                       __connman_cgroup_set_route(index, session->pid);
+
+                       return;
+               }
+       }
+
+       if (info_last != NULL) {
+               if (info_last->entry != NULL) {
+                       index = __connman_service_get_index(
+                                       info_last->entry->service);
+                       __connman_cgroup_set_route(index, 0);
+               }
+       }
+}
+
 static void select_and_connect(struct connman_session *session,
                                enum connman_session_reason reason)
 {
@@ -1095,6 +1125,7 @@ static void select_and_connect(struct connman_session 
*session,
                case CONNMAN_SERVICE_STATE_IDLE:
                case CONNMAN_SERVICE_STATE_DISCONNECT:
                        select_service(info, entry);
+                       update_route(session);
                        return;
                case CONNMAN_SERVICE_STATE_UNKNOWN:
                case CONNMAN_SERVICE_STATE_FAILURE:
@@ -1582,6 +1613,7 @@ static void session_pid(const char *owner, pid_t pid, 
void *user_data)
                goto out;
 
        session->pid = pid;
+       update_route(session);
 
 out:
        g_free(session_path);
-- 
1.7.12.rc1.16.g05a20c8

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to