Skip to content

Commit

Permalink
Update startup of Daemon components
Browse files Browse the repository at this point in the history
- Add cleanups when errors occur at component startup
- Start D-Bus API as last component so systemd service is not marked as
  ready until all components started successfully

Signed-off-by: hwipl <33433250+hwipl@users.noreply.github.com>
  • Loading branch information
hwipl committed May 28, 2024
1 parent 4fa9b64 commit 79f3a1a
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions internal/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -668,14 +668,14 @@ func (d *Daemon) checkTrafPol() error {
func (d *Daemon) start() {
defer close(d.closed)
defer d.sleepmon.Stop()
defer d.profmon.Stop()
defer d.stopTrafPol()
defer d.stopTND()
defer d.vpnsetup.Stop()
defer d.server.Stop()
defer d.handleRunnerDisconnect() // clean up vpn config
defer d.runner.Stop()
defer d.dbus.Stop()
defer d.profmon.Stop()
defer d.server.Shutdown()

// run main loop
Expand Down Expand Up @@ -737,14 +737,23 @@ func (d *Daemon) Start() error {
return fmt.Errorf("Daemon could not start sleep monitor: %w", err)
}

// start xml profile monitor
err := d.profmon.Start()
if err != nil {
err = fmt.Errorf("Daemon could not start ProfileMon: %w", err)
goto cleanup_profmon
}

// start traffic policing
if err := d.checkTrafPol(); err != nil {
return err
err = d.checkTrafPol()
if err != nil {
goto cleanup_trafpol
}

// start TND
if err := d.checkTND(); err != nil {
return err
err = d.checkTND()
if err != nil {
goto cleanup_tnd
}

// start VPN setup
Expand All @@ -754,7 +763,7 @@ func (d *Daemon) Start() error {
d.runner.Start()

// start unix server
err := d.server.Start()
err = d.server.Start()
if err != nil {
err = fmt.Errorf("Daemon could not start Socket API server: %w", err)
goto cleanup_unix
Expand All @@ -767,13 +776,6 @@ func (d *Daemon) Start() error {
goto cleanup_dbus
}

// start xml profile monitor
err = d.profmon.Start()
if err != nil {
err = fmt.Errorf("Daemon could not start ProfileMon: %w", err)
goto cleanup_profmon
}

// set initial status
d.setStatusTrustedNetwork(false)
d.setStatusConnectionState(vpnstatus.ConnectionStateDisconnected)
Expand All @@ -784,15 +786,17 @@ func (d *Daemon) Start() error {
return nil

// clean up after error
cleanup_profmon:
d.dbus.Stop()
cleanup_dbus:
d.server.Stop()
cleanup_unix:
d.runner.Stop()
d.vpnsetup.Stop()
d.stopTND()
cleanup_tnd:
d.stopTrafPol()
cleanup_trafpol:
d.profmon.Stop()
cleanup_profmon:
d.sleepmon.Stop()

return err
Expand Down

0 comments on commit 79f3a1a

Please sign in to comment.