summaryrefslogtreecommitdiff
path: root/nuttx/sched/group_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/sched/group_internal.h')
-rw-r--r--nuttx/sched/group_internal.h71
1 files changed, 50 insertions, 21 deletions
diff --git a/nuttx/sched/group_internal.h b/nuttx/sched/group_internal.h
index aa8476e3c..b78b38453 100644
--- a/nuttx/sched/group_internal.h
+++ b/nuttx/sched/group_internal.h
@@ -52,37 +52,62 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
+/* Any negative GID is invalid. */
+
+#define INVALID_GROUP_ID (pid_t)-1
+#define IS_INVALID_GID(gid) ((int)(gid) < 0)
/****************************************************************************
* Public Type Definitions
****************************************************************************/
/****************************************************************************
- * Global Variables
+ * Public Data
****************************************************************************/
+/* This is the head of a list of all group members */
+
+#ifdef HAVE_GROUP_MEMBERS
+extern FAR struct task_group_s *g_grouphead;
+#endif
+
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/* Task group data structure management */
#ifdef HAVE_TASK_GROUP
-int group_allocate(FAR _TCB *tcb);
-int group_initialize(FAR _TCB *tcb);
-int group_bind(FAR _TCB *tcb);
-int group_join(FAR _TCB *tcb);
+int group_allocate(FAR _TCB *tcb);
+int group_initialize(FAR _TCB *tcb);
+int group_bind(FAR _TCB *tcb);
+int group_join(FAR _TCB *tcb);
void group_leave(FAR _TCB *tcb);
+
+#ifdef HAVE_GROUP_MEMBERS
+FAR struct task_group_s *group_find(gid_t gid);
+int group_addmember(FAR struct task_group_s *group, pid_t pid);
+int group_removemember(FAR struct task_group_s *group, pid_t pid);
+#else
+# define group_find(gid) (NULL)
+# define group_addmember(group,pid) (0)
+# define group_removemember(group,pid) (1)
+#endif
+
#ifndef CONFIG_DISABLE_SIGNALS
-int group_signal(FAR _TCB *tcb, FAR siginfo_t *info);
+int group_signal(FAR struct task_group_s *group, FAR siginfo_t *info);
#else
-# define group_signal(tcb,info) (0)
+# define group_signal(tcb,info) (0)
#endif
+
#else
-# define group_allocate(tcb) (0)
-# define group_initialize(tcb) (0)
-# define group_bind(tcb) (0)
-# define group_join(tcb) (0)
-# define group_leave(tcb)
-# define group_signal(tcb,info) (0)
+# define group_allocate(tcb) (0)
+# define group_initialize(tcb) (0)
+# define group_bind(tcb) (0)
+# define group_join(tcb) (0)
+# define group_leave(tcb)
+# define group_find(gid) (NULL)
+# define group_addmember(group,pid) (0)
+# define group_removemember(group,pid) (1)
+# define group_signal(tcb,info) (0)
#endif /* HAVE_TASK_GROUP */
/* Parent/child data management */
@@ -91,14 +116,18 @@ int group_signal(FAR _TCB *tcb, FAR siginfo_t *info);
int task_reparent(pid_t ppid, pid_t chpid);
#ifdef CONFIG_SCHED_CHILD_STATUS
-FAR struct child_status_s *task_allocchild(void);
-void task_freechild(FAR struct child_status_s *status);
-void task_addchild(FAR _TCB *tcb, FAR struct child_status_s *child);
-FAR struct child_status_s *task_exitchild(FAR _TCB *tcb);
-FAR struct child_status_s *task_findchild(FAR _TCB *tcb, pid_t pid);
-FAR struct child_status_s *task_removechild(FAR _TCB *tcb, pid_t pid);
-void task_removechildren(FAR _TCB *tcb);
-#endif
+FAR struct child_status_s *group_allocchild(void);
+void group_freechild(FAR struct child_status_s *status);
+void group_addchild(FAR struct task_group_s *group,
+ FAR struct child_status_s *child);
+FAR struct child_status_s *group_exitchild(FAR struct task_group_s *group);
+FAR struct child_status_s *group_findchild(FAR struct task_group_s *group,
+ pid_t pid);
+FAR struct child_status_s *group_removechild(FAR struct task_group_s *group,
+ pid_t pid);
+void group_removechildren(FAR struct task_group_s *group);
+
+#endif /* CONFIG_SCHED_CHILD_STATUS */
#endif /* CONFIG_SCHED_HAVE_PARENT */
#endif /* __SCHED_GROUP_INERNAL_H */