[CRIU] [PATCH v3 08/55] pid: Add equel_pid() helper

Kirill Tkhai ktkhai at virtuozzo.com
Mon Apr 10 01:16:23 PDT 2017


This allows to compare pids values on the whole hierarhy.

v3: Do not use break as some travis builds don't like it.

Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
 criu/include/pid.h |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/criu/include/pid.h b/criu/include/pid.h
index 475b17a39..1a43a3067 100644
--- a/criu/include/pid.h
+++ b/criu/include/pid.h
@@ -4,6 +4,7 @@
 #include <compel/task-state.h>
 #include "stdbool.h"
 #include "rbtree.h"
+#include "log.h"
 
 /*
  * Task states, used in e.g. struct pid's state.
@@ -45,6 +46,22 @@ struct pid {
 	} ns[1]; /* Must be at the end of struct pid */
 };
 
+#define equal_pid(a, b)							\
+({									\
+	int ___i, ___ret = true;					\
+	if (a->level == b->level) {					\
+		for (___i = 0; ___i < a->level; ___i++)			\
+			if (a->ns[___i].virt != b->ns[___i].virt) {	\
+				___ret = false;				\
+				___i = a->level; /* break */		\
+			}						\
+	} else {							\
+		pr_err("Wrong pid nesting level\n");			\
+		___ret = false;						\
+	}								\
+	___ret;								\
+})
+
 /*
  * When we have to restore a shared resource, we mush select which
  * task should do it, and make other(s) wait for it. In order to



More information about the CRIU mailing list