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