Disconnect closes this session and releases all in-memory resources (event handlers, tool handlers, permission handlers). The caller should ensure the session is idle (e.g., [Session.SendAndWait] has returned) before disconnecting. If the session is not idle, in-flight event handlers or tool handle
()
| 1654 | // log.Printf("Failed to disconnect session: %v", err) |
| 1655 | // } |
| 1656 | func (s *Session) Disconnect() error { |
| 1657 | _, err := s.client.Request(context.Background(), "session.destroy", sessionDestroyRequest{SessionID: s.SessionID}) |
| 1658 | if err != nil { |
| 1659 | return fmt.Errorf("failed to disconnect session: %w", err) |
| 1660 | } |
| 1661 | |
| 1662 | s.closeOnce.Do(func() { close(s.eventCh) }) |
| 1663 | |
| 1664 | // Clear handlers |
| 1665 | s.handlerMutex.Lock() |
| 1666 | s.handlers = nil |
| 1667 | s.handlerMutex.Unlock() |
| 1668 | |
| 1669 | s.toolHandlersM.Lock() |
| 1670 | s.toolHandlers = nil |
| 1671 | s.toolHandlersM.Unlock() |
| 1672 | |
| 1673 | s.permissionMux.Lock() |
| 1674 | s.permissionHandler = nil |
| 1675 | s.permissionMux.Unlock() |
| 1676 | |
| 1677 | s.commandHandlersMu.Lock() |
| 1678 | s.commandHandlers = nil |
| 1679 | s.commandHandlersMu.Unlock() |
| 1680 | |
| 1681 | s.elicitationMu.Lock() |
| 1682 | s.elicitationHandler = nil |
| 1683 | s.elicitationMu.Unlock() |
| 1684 | |
| 1685 | return nil |
| 1686 | } |
| 1687 | |
| 1688 | // Abort aborts the currently processing message in this session. |
| 1689 | // |