Skip to content

Dependents not restarted after SIGHUP reload of service in dependency chain #476

@troglobit

Description

@troglobit

When a service that supports SIGHUP is touched and reloaded, its reverse dependents are sometimes not properly unfrozen (SIGCONT).

In a chain like (the Infix OS FRR routing daemon setup):

mgmtd ← netd <pid/mgmtd> ← zebra <!pid/netd> ← {staticd,ripd} <!pid/zebra>

After initctl touch netd.conf + initctl reload:

  1. All conditions go FLUX (cond_reload() bumps the generation)
  2. zebra, staticd, ripd go PAUSED (SIGSTOP, their conditions are in flux)
  3. netd is SIGHUP'd (supports reload, config was touched) — same PID
  4. pidfile_reconf() reasserts conditions for unchanged RUNNING services using cond_set_path(), which updates the condition files but does not call cond_update()
  5. zebra, staticd, and ripd never evaluate their now-satisfied conditions and stay PAUSED forever

Related-to: #416

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions