mirror of
https://github.com/troglobit/finit.git
synced 2026-11-13 17:00:16 +00:00
conf: route service conditions through one owner primitive
A service's condition was computed with mkcond() at each of the six sites that assert or clear it, and svc_find_by_cond() reimplemented the reverse lookup a seventh time. maybe_clear_cond() had its own scan for another service supplying the same condition. svc_cond_owner() answers who owns a condition, svc_cond_nth() walks the conditions a service owns, and svc_cond_set()/svc_cond_clear() apply to all of them. svc_find_by_cond() becomes a wrapper, and maybe_clear_cond() keeps its rule per condition rather than for the one it used to compute. The provides[] storage lands here unused, since svc_cond_nth() reads num_provides. Nothing sets it yet, so a service still owns exactly its own pid/<ident> and there is no functional change. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
4299ce8839
commit
22fbb408eb
7 files changed
+129
-36
No files matched your search
@@ -102,6 +102,7 @@ typedef enum {
|
||||
#define MAX_COND_LEN (MAX_ARG_LEN * 3)
|
||||
#define MAX_USER_LEN 16
|
||||
#define MAX_NUM_SUPGROUPS 4
|
||||
#define MAX_NUM_PROVIDES 4
|
||||
#define MAX_NUM_FDS 64 /* Max number of I/O plugins */
|
||||
#define MAX_NUM_SVC_ARGS 64
|
||||
|
||||
@@ -151,6 +152,10 @@ typedef struct svc {
|
||||
svc_block_t block; /* Reason that this service is currently stopped */
|
||||
char cond[MAX_COND_LEN];
|
||||
|
||||
/* Conditions this service asserts on top of its own pid/<ident> */
|
||||
char provides[MAX_NUM_PROVIDES][MAX_COND_LEN];
|
||||
int num_provides;
|
||||
|
||||
/* Instance specifics */
|
||||
int job; /* For internal use only, canonical ref is NAME:ID */
|
||||
char name[MAX_ARG_LEN];
|
||||
@@ -266,6 +271,9 @@ svc_t *svc_find (char *name, char *id);
|
||||
svc_t *svc_find_by_str (const char *str);
|
||||
svc_t *svc_find_by_pid (pid_t pid);
|
||||
svc_t *svc_find_by_cond (const char *cond);
|
||||
svc_t *svc_cond_owner (const char *cond, svc_t *skip);
|
||||
const char *svc_cond_nth (svc_t *svc, int i, char *buf, size_t len);
|
||||
void svc_provides_reset (void);
|
||||
svc_t *svc_find_by_jobid (int job, char *id);
|
||||
svc_t *svc_find_by_tty (char *dev);
|
||||
svc_t *svc_find_by_pidfile (char *fn);
|
||||
|
||||
Reference in new issue
Block a user