diff -r 9f0db041581a -r fbe69cd9afdf core/ConVarManager.cpp --- a/core/ConVarManager.cpp Thu Feb 27 20:22:01 2014 -0500 +++ b/core/ConVarManager.cpp Thu Feb 27 19:55:13 2014 -0700 @@ -123,6 +123,8 @@ } #endif + g_Players.AddClientListener(this); + #if SOURCE_ENGINE >= SE_ORANGEBOX SH_ADD_HOOK(ICvar, CallGlobalChangeCallbacks, icvar, SH_STATIC(OnConVarChanged), false); #else @@ -194,6 +196,8 @@ } #endif + g_Players.RemoveClientListener(this); + #if SOURCE_ENGINE >= SE_ORANGEBOX SH_REMOVE_HOOK(ICvar, CallGlobalChangeCallbacks, icvar, SH_STATIC(OnConVarChanged), false); #else @@ -310,6 +314,22 @@ } } +void ConVarManager::OnClientDisconnected(int client) +{ + /* Remove convar queries for this client that haven't returned results yet */ + for (List::iterator iter = m_ConVarQueries.begin(); iter != m_ConVarQueries.end();) + { + ConVarQuery &query = (*iter); + if (query.client == client) + { + iter = m_ConVarQueries.erase(iter); + continue; + } + + ++iter; + } +} + void ConVarManager::OnHandleDestroy(HandleType_t type, void *object) { } @@ -628,7 +648,7 @@ return InvalidQueryCvarCookie; } - ConVarQuery query = {cookie, pCallback, (cell_t)hndl}; + ConVarQuery query = {cookie, pCallback, (cell_t)hndl, IndexOfEdict(pPlayer)}; m_ConVarQueries.push_back(query); #endif