afm-run: fix bug in handling pids
authorJosé Bollo <jose.bollo@iot.bzh>
Mon, 15 Feb 2016 21:36:36 +0000 (22:36 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Mon, 15 Feb 2016 21:38:15 +0000 (22:38 +0100)
Change-Id: If5d750a56ef7229769c46cc33d40faeb8ea76ece
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/afm-run.c

index 360f29d..915230d 100644 (file)
@@ -64,9 +64,23 @@ static int runnerid = 0;
 static const char fwk_user_app_dir[] = FWK_USER_APP_DIR;
 static char *homeappdir;
 
+/****************** manages pids **********************/
+
+/* get a runner by its pid */
+static struct apprun *runner_of_pid(pid_t pid)
+{
+       int i;
+       struct apprun *result;
+
+       for (i = 0 ; i < ROOT_RUNNERS_COUNT ; i++)
+               for (result = runners_by_pgid[i] ; result != NULL ; result = result->next_by_pgid)
+                       if (result->pids[0] == pid || result->pids[1] == pid)
+                               return result;
+       return NULL;
+}
+
 /****************** manages pgids **********************/
 
-#if 0
 /* get a runner by its pgid */
 static struct apprun *runner_of_pgid(pid_t pgid)
 {
@@ -75,12 +89,11 @@ static struct apprun *runner_of_pgid(pid_t pgid)
                result = result->next_by_pgid;
        return result;
 }
-#endif
 
 /* insert a runner for its pgid */
 static void pgid_insert(struct apprun *runner)
 {
-       struct apprun **prev = &runners_by_runid[(int)(runner->pids[0] & (ROOT_RUNNERS_COUNT - 1))];
+       struct apprun **prev = &runners_by_pgid[(int)(runner->pids[0] & (ROOT_RUNNERS_COUNT - 1))];
        runner->next_by_pgid = *prev;
        *prev = runner;
 }
@@ -88,24 +101,14 @@ static void pgid_insert(struct apprun *runner)
 /* remove a runner for its pgid */
 static void pgid_remove(struct apprun *runner)
 {
-       struct apprun **prev = &runners_by_runid[(int)(runner->pids[0] & (ROOT_RUNNERS_COUNT - 1))];
-       runner->next_by_pgid = *prev;
-       *prev = runner;
-}
-
-/****************** manages pids **********************/
-
-/* get a runner by its pid */
-static struct apprun *runner_of_pid(pid_t pid)
-{
-       int i;
-       struct apprun *result;
-
-       for (i = 0 ; i < ROOT_RUNNERS_COUNT ; i++)
-               for (result = runners_by_pgid[i] ; result != NULL ; result = result->next_by_pgid)
-                       if (result->pids[0] == pid || result->pids[1] == pid)
-                               return result;
-       return NULL;
+       struct apprun **prev = &runners_by_pgid[(int)(runner->pids[0] & (ROOT_RUNNERS_COUNT - 1))];
+       while (*prev) {
+               if (*prev == runner) {
+                       *prev = runner->next_by_pgid;
+                       break;
+               }
+               prev = &(*prev)->next_by_pgid;
+       }
 }
 
 /****************** manages runners (by runid) **********************/