mirror of
https://github.com/troglobit/finit.git
synced 2026-11-03 13:28:27 +00:00
Fix #314: skip restart if conditions are lost
This change prevents Finit from attempting to continue restarting crashing services that've lost their conditions. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
2a7abf1db0
commit
8b9bb1c7ce
2 files changed
+7
No files matched your search
@@ -270,6 +270,12 @@ int cond_update(const char *name)
|
|||||||
|
|
||||||
affects++;
|
affects++;
|
||||||
dbg("%s: match <%s> %s(%s)", name ?: "nil", svc->cond, svc->desc, svc->cmd);
|
dbg("%s: match <%s> %s(%s)", name ?: "nil", svc->cond, svc->desc, svc->cmd);
|
||||||
|
/* Fix bug #314: race condition between crashing services and conditions */
|
||||||
|
if (svc_is_restart(svc) && cond_get_agg(svc->cond) == COND_OFF) {
|
||||||
|
dbg("%s: cancel timer & unblock => WAITING state.", name ?: "nil");
|
||||||
|
service_timeout_cancel(svc);
|
||||||
|
svc_unblock(svc);
|
||||||
|
}
|
||||||
service_step(svc);
|
service_step(svc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -263,6 +263,7 @@ static inline int svc_is_blocked (svc_t *svc) { return svc && svc->block != SV
|
|||||||
static inline int svc_is_busy (svc_t *svc) { return svc && svc->block == SVC_BLOCK_BUSY; }
|
static inline int svc_is_busy (svc_t *svc) { return svc && svc->block == SVC_BLOCK_BUSY; }
|
||||||
static inline int svc_is_missing (svc_t *svc) { return svc && svc->block == SVC_BLOCK_MISSING; }
|
static inline int svc_is_missing (svc_t *svc) { return svc && svc->block == SVC_BLOCK_MISSING; }
|
||||||
static inline int svc_is_crashing (svc_t *svc) { return svc && svc->block == SVC_BLOCK_CRASHING; }
|
static inline int svc_is_crashing (svc_t *svc) { return svc && svc->block == SVC_BLOCK_CRASHING; }
|
||||||
|
static inline int svc_is_restart (svc_t *svc) { return svc && svc->block == SVC_BLOCK_RESTARTING; }
|
||||||
|
|
||||||
static inline void svc_unblock (svc_t *svc) { if (svc) svc->block = SVC_BLOCK_NONE; }
|
static inline void svc_unblock (svc_t *svc) { if (svc) svc->block = SVC_BLOCK_NONE; }
|
||||||
#define svc_start(svc) svc_unblock(svc)
|
#define svc_start(svc) svc_unblock(svc)
|
||||||
|
|||||||
Reference in new issue
Block a user