llvm::StringMap<std::function<void(llvm::json::Value)>> Notifications;
llvm::StringMap<std::function<void(llvm::json::Value, ReplyOnce)>> Calls;
- // The maximum number of callbacks held in clangd.
- //
- // We bound the maximum size to the pending map to prevent memory leakage
- // for cases where LSP clients don't reply for the request.
- static constexpr int MaxReplayCallbacks = 100;
- mutable std::mutex CallMutex;
- int NextCallID = 0; /* GUARDED_BY(CallMutex) */
- std::deque<std::pair</*RequestID*/ int,
- /*ReplyHandler*/ Callback<llvm::json::Value>>>
- ReplyCallbacks; /* GUARDED_BY(CallMutex) */
// Method calls may be cancelled by ID, so keep track of their state.
// This needs a mutex: handlers may finish on a different thread, and that's
}));
}
+ // The maximum number of callbacks held in clangd.
+ //
+ // We bound the maximum size to the pending map to prevent memory leakage
+ // for cases where LSP clients don't reply for the request.
+ // This has to go after RequestCancellers and RequestCancellersMutex since it
+ // can contain a callback that has a cancelable context.
+ static constexpr int MaxReplayCallbacks = 100;
+ mutable std::mutex CallMutex;
+ int NextCallID = 0; /* GUARDED_BY(CallMutex) */
+ std::deque<std::pair</*RequestID*/ int,
+ /*ReplyHandler*/ Callback<llvm::json::Value>>>
+ ReplyCallbacks; /* GUARDED_BY(CallMutex) */
+
ClangdLSPServer &Server;
};
constexpr int ClangdLSPServer::MessageHandler::MaxReplayCallbacks;