diff --git a/api/api.go b/api/api.go index ffe9594..ca331a9 100644 --- a/api/api.go +++ b/api/api.go @@ -361,20 +361,23 @@ func (s *API) handleExit(w http.ResponseWriter, r *http.Request) { logger.Info("Received exit request via API") - // Call the exit handler if set - if s.onExit != nil { - if err := s.onExit(); err != nil { - http.Error(w, fmt.Sprintf("Exit failed: %v", err), http.StatusInternalServerError) - return - } - } - - // Return a success response + // Return a success response first w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(map[string]string{ "status": "shutdown initiated", }) + + // Call the exit handler after responding, in a goroutine with a small delay + // to ensure the response is fully sent before shutdown begins + if s.onExit != nil { + go func() { + time.Sleep(100 * time.Millisecond) + if err := s.onExit(); err != nil { + logger.Error("Exit handler failed: %v", err) + } + }() + } } // handleSwitchOrg handles the /switch-org endpoint diff --git a/olm/olm.go b/olm/olm.go index 6c06032..caae624 100644 --- a/olm/olm.go +++ b/olm/olm.go @@ -214,10 +214,6 @@ func StartTunnel(config TunnelConfig) { // debug print out the whole config logger.Debug("Starting tunnel with config: %+v", config) - if config.Holepunch { - logger.Warn("Hole punching is enabled. This is EXPERIMENTAL and may not work in all environments.") - } - // Create a cancellable context for this tunnel process tunnelCtx, cancel := context.WithCancel(globalCtx) tunnelCancel = cancel