Crinit -- Configurable Rootfs Init
Loading...
Searching...
No Matches
taskdb.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
6#ifndef __TASKDB_H__
7#define __TASKDB_H__
8
9#include <pthread.h>
10#include <stddef.h>
11
12#include "task.h"
13
14#define CRINIT_MONITOR_DEP_NAME "@crinitmon"
15#define CRINIT_PROVIDE_DEP_NAME "@provided"
16#define CRINIT_TASKDB_INITIAL_SIZE 256
17
25
29typedef struct crinitTaskDB {
31 size_t taskSetSize;
32 size_t taskSetItems;
33
36
37 bool
39
40 pthread_mutex_t lock;
42 pthread_cond_t changed;
44
51#define crinitTaskDbForEach(taskDb, task) \
52 for ((task) = (taskDb)->taskSet; (task) != (taskDb)->taskSet + (taskDb)->taskSetItems; (task)++)
53
71int crinitTaskDBInsert(crinitTaskDB_t *ctx, const crinitTask_t *t, bool overwrite);
77#define crinitTaskDBUpdate(ctx, t) crinitTaskDBInsert(ctx, t, true)
78
124int crinitTaskDBProvideFeatureByTaskName(crinitTaskDB_t *ctx, const char *taskName, crinitTaskState_t newState);
139int crinitTaskDBAddDepToTask(crinitTaskDB_t *ctx, const crinitTaskDep_t *dep, const char *taskName);
156int crinitTaskDBRemoveDepFromTask(crinitTaskDB_t *ctx, const crinitTaskDep_t *dep, const char *taskName);
157
170int crinitTaskDBGetTaskByName(crinitTaskDB_t *ctx, crinitTask_t **task, const char *taskName);
171
187int crinitTaskRearmTrigger(crinitTaskDB_t *ctx, const char *taskName);
188
206int crinitTaskDBSetTaskState(crinitTaskDB_t *ctx, crinitTaskState_t s, const char *taskName);
222int crinitTaskDBGetTaskState(crinitTaskDB_t *ctx, crinitTaskState_t *s, const char *taskName);
223
239int crinitTaskDBSetTaskPID(crinitTaskDB_t *ctx, pid_t pid, const char *taskName);
256int crinitTaskDBGetTaskPID(crinitTaskDB_t *ctx, pid_t *pid, const char *taskName);
257
275int crinitTaskDBGetTaskStateAndPID(crinitTaskDB_t *ctx, crinitTaskState_t *s, pid_t *pid, const char *taskName);
276
289int crinitTaskDBSetTaskRespawnInhibit(crinitTaskDB_t *ctx, bool inhibit, const char *taskName);
290
310crinitTask_t *crinitTaskDBBorrowTask(crinitTaskDB_t *ctx, const char *taskName);
322
357
373 int (*spawnFunc)(crinitTaskDB_t *ctx, const crinitTask_t *,
375 size_t initialSize);
381#define crinitTaskDBInit(ctx, spawnFunc) crinitTaskDBInitWithSize(ctx, spawnFunc, CRINIT_TASKDB_INITIAL_SIZE);
382
395
410int crinitTaskDBExportTaskNamesToArray(crinitTaskDB_t *ctx, char **tasks[], size_t *numTasks);
411
412#endif /* __TASKDB_H__ */
unsigned long crinitTaskState_t
Type to store Task state bitmask.
Definition crinit-sdefs.h:17
Definition taskdb.h:29
pthread_mutex_t lock
Definition taskdb.h:40
pthread_cond_t changed
Condition variable to be signalled if taskSet or spawnInhibit is changed.
Definition taskdb.h:42
crinitTask_t * taskSet
Dynamic array of tasks, corresponds to task configs specified in the series config.
Definition taskdb.h:30
int(* spawnFunc)(struct crinitTaskDB *ctx, const crinitTask_t *, crinitDispatchThreadMode_t mode)
Definition taskdb.h:35
size_t taskSetItems
Number of elements in the task array.
Definition taskdb.h:32
bool spawnInhibit
Specifies if process spawning is currently inhibited, respected by crinitTaskDBSpawnReady().
Definition taskdb.h:38
size_t taskSetSize
Current maximum size of the task array.
Definition taskdb.h:31
Definition task.h:70
Definition task.h:86
Header defining the data structures belonging to a single task and related functions.
int crinitTaskDBInsert(crinitTaskDB_t *ctx, const crinitTask_t *t, bool overwrite)
Definition taskdb.c:114
int crinitTaskDBDestroy(crinitTaskDB_t *ctx)
Definition taskdb.c:94
int crinitTaskDBGetTaskState(crinitTaskDB_t *ctx, crinitTaskState_t *s, const char *taskName)
Definition taskdb.c:341
enum crinitDispatchThreadMode crinitDispatchThreadMode_t
int crinitTaskDBExportTaskNamesToArray(crinitTaskDB_t *ctx, char **tasks[], size_t *numTasks)
Definition taskdb.c:629
int crinitTaskDBSetTaskPID(crinitTaskDB_t *ctx, pid_t pid, const char *taskName)
Definition taskdb.c:361
int crinitTaskDBAddDepToTask(crinitTaskDB_t *ctx, const crinitTaskDep_t *dep, const char *taskName)
Definition taskdb.c:471
int crinitTaskDBSpawnReady(crinitTaskDB_t *ctx, crinitDispatchThreadMode_t mode)
Definition taskdb.c:174
int crinitTaskDBInitWithSize(crinitTaskDB_t *ctx, int(*spawnFunc)(crinitTaskDB_t *ctx, const crinitTask_t *, crinitDispatchThreadMode_t mode), size_t initialSize)
Definition taskdb.c:54
int crinitTaskDBGetTaskPID(crinitTaskDB_t *ctx, pid_t *pid, const char *taskName)
Definition taskdb.c:380
int crinitTaskDBProvideFeature(crinitTaskDB_t *ctx, const crinitTask_t *provider, crinitTaskState_t newState)
Definition taskdb.c:585
int crinitTaskRearmTrigger(crinitTaskDB_t *ctx, const char *taskName)
Definition taskdb.c:253
int crinitTaskDBSetTaskState(crinitTaskDB_t *ctx, crinitTaskState_t s, const char *taskName)
Definition taskdb.c:271
struct crinitTaskDB crinitTaskDB_t
int crinitTaskDBSetSpawnInhibit(crinitTaskDB_t *ctx, bool inh)
Definition taskdb.c:212
int crinitTaskDBFulfillDep(crinitTaskDB_t *ctx, const crinitTaskDep_t *dep, crinitTask_t *target)
Definition taskdb.c:564
crinitDispatchThreadMode
Definition taskdb.h:21
@ CRINIT_DISPATCH_THREAD_MODE_START
Definition taskdb.h:22
@ CRINIT_DISPATCH_THREAD_MODE_STOP
Definition taskdb.h:23
int crinitTaskDBGetTaskStateAndPID(crinitTaskDB_t *ctx, crinitTaskState_t *s, pid_t *pid, const char *taskName)
Definition taskdb.c:400
int crinitTaskDBGetTaskByName(crinitTaskDB_t *ctx, crinitTask_t **task, const char *taskName)
Definition taskdb.c:230
int crinitTaskDBRemoveDepFromTask(crinitTaskDB_t *ctx, const crinitTaskDep_t *dep, const char *taskName)
Definition taskdb.c:544
int crinitTaskDBSetTaskRespawnInhibit(crinitTaskDB_t *ctx, bool inhibit, const char *taskName)
Definition taskdb.c:422
int crinitTaskDBRemit(crinitTaskDB_t *ctx)
Definition taskdb.c:458
int crinitTaskDBProvideFeatureByTaskName(crinitTaskDB_t *ctx, const char *taskName, crinitTaskState_t newState)
Definition taskdb.c:611
crinitTask_t * crinitTaskDBBorrowTask(crinitTaskDB_t *ctx, const char *taskName)
Definition taskdb.c:441