返回 DeepSeek-Reasonix
session_service_shutdown.go
根目录 / internal / bot / session_service_shutdown.go
1 package bot
2
3 import (
4 "context"
5
6 "reasonix/internal/session"
7 )
8
9 // finishSessionTeardown retires the last sessions and then releases the
10 // services. CloseAll refuses a runtime that is still bound, so the order
11 // matters.
12 func (gw *BotGateway) finishSessionTeardown() {
13 gw.closeSessions()
14 gw.closeSessionServices()
15 }
16
17 // Session services are cached per root and outlive the individual sessions, so
18 // they still own the writer lease after the last state is retired. A held lease
19 // keeps the directory unremovable on Windows and unopenable by the next process.
20 func (gw *BotGateway) closeSessionServices() {
21 gw.sessionServicesMu.Lock()
22 services := make([]*session.Service, 0, len(gw.sessionServices))
23 for root, service := range gw.sessionServices {
24 services = append(services, service)
25 delete(gw.sessionServices, root)
26 }
27 gw.sessionServicesMu.Unlock()
28 for _, service := range services {
29 if err := service.CloseAll(context.Background()); err != nil {
30 gw.logger.Warn("error releasing bot session writer lease", "err", err)
31 }
32 }
33 }
34
34 lines GO