Browse Source

log when the waiting for the process to stop to help debug when other tasks execute during this wait.
expire timer clear the timer reference because it will not be reused.
close will clean up expireTimer if calling code has not already done this.

Mark Ward 1 year ago
parent
commit
63c763685f
2 changed files with 11 additions and 1 deletions
  1. 6 1
      llm/server.go
  2. 5 0
      server/sched.go

+ 6 - 1
llm/server.go

@@ -902,7 +902,12 @@ func (s *llmServer) Close() error {
 		if err := s.cmd.Process.Kill(); err != nil {
 		if err := s.cmd.Process.Kill(); err != nil {
 			return err
 			return err
 		}
 		}
-		return s.cmd.Wait()
+
+		if err := s.cmd.Wait(); err != nil {
+			return err
+		}
+
+		slog.Debug("llama server stopped")
 	}
 	}
 
 
 	return nil
 	return nil

+ 5 - 0
server/sched.go

@@ -250,6 +250,7 @@ func (s *Scheduler) processCompleted(ctx context.Context) {
 						defer runner.refMu.Unlock()
 						defer runner.refMu.Unlock()
 						if runner.expireTimer != nil {
 						if runner.expireTimer != nil {
 							runner.expireTimer.Stop()
 							runner.expireTimer.Stop()
+							runner.expireTimer = nil
 						}
 						}
 						s.expiredCh <- runner
 						s.expiredCh <- runner
 					})
 					})
@@ -430,6 +431,10 @@ type runnerRef struct {
 
 
 // The refMu must already be held when calling unload
 // The refMu must already be held when calling unload
 func (runner *runnerRef) unload() {
 func (runner *runnerRef) unload() {
+	if runner.expireTimer != nil {
+		runner.expireTimer.Stop()
+		runner.expireTimer = nil
+	}
 	if runner.llama != nil {
 	if runner.llama != nil {
 		runner.llama.Close()
 		runner.llama.Close()
 	}
 	}