mirror of
https://github.com/troglobit/finit.git
synced 2026-10-31 13:00:32 +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
@@ -145,6 +145,31 @@ char *mkcond(svc_t *svc, char *buf, size_t len)
|
||||
return buf;
|
||||
}
|
||||
|
||||
/*
|
||||
* Assert or clear every condition a service owns: its own pid/<ident>
|
||||
* and anything it declares with provides. Each site that owns a
|
||||
* service's conditions goes through these, so the two cannot drift.
|
||||
*/
|
||||
void svc_cond_set(svc_t *svc)
|
||||
{
|
||||
char buf[MAX_COND_LEN];
|
||||
const char *cond;
|
||||
int i = 0;
|
||||
|
||||
while ((cond = svc_cond_nth(svc, i++, buf, sizeof(buf))))
|
||||
cond_set(cond);
|
||||
}
|
||||
|
||||
void svc_cond_clear(svc_t *svc)
|
||||
{
|
||||
char buf[MAX_COND_LEN];
|
||||
const char *cond;
|
||||
int i = 0;
|
||||
|
||||
while ((cond = svc_cond_nth(svc, i++, buf, sizeof(buf))))
|
||||
cond_clear(cond);
|
||||
}
|
||||
|
||||
static int cond_set_gen(const char *file, unsigned int gen)
|
||||
{
|
||||
char *ptr, path[256];
|
||||
|
||||
Reference in new issue
Block a user