Destroy client, network sockets and other objects on shutdown.

This commit is contained in:
Mr_Goldberg 2022-08-10 03:24:29 -04:00
parent 04022c005f
commit 7163daa6c1
No known key found for this signature in database
GPG key ID: 8597D87419DEF278
4 changed files with 109 additions and 29 deletions

View file

@ -18,19 +18,21 @@
#include "steam_client.h"
#include "settings_parser.h"
static std::mutex kill_background_thread_mutex;
static std::condition_variable kill_background_thread_cv;
static std::atomic_bool kill_background_thread;
static bool kill_background_thread;
static void background_thread(Steam_Client *client)
{
PRINT_DEBUG("background thread starting\n");
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
while (1) {
if (kill_background_thread || kill_background_thread_cv.wait_for(lck, std::chrono::seconds(1)) != std::cv_status::timeout) {
if (kill_background_thread) {
PRINT_DEBUG("background thread exit\n");
return;
{
std::unique_lock<std::mutex> lck(kill_background_thread_mutex);
if (kill_background_thread || kill_background_thread_cv.wait_for(lck, std::chrono::seconds(1)) != std::cv_status::timeout) {
if (kill_background_thread) {
PRINT_DEBUG("background thread exit\n");
return;
}
}
}
@ -122,7 +124,59 @@ Steam_Client::Steam_Client()
Steam_Client::~Steam_Client()
{
network->shutDown();
delete steam_gameserver;
delete steam_gameserver_utils;
delete steam_gameserverstats;
delete steam_gameserver_networking;
delete steam_gameserver_http;
delete steam_gameserver_inventory;
delete steam_gameserver_ugc;
delete steam_gameserver_apps;
delete steam_gameserver_networking_sockets;
delete steam_gameserver_networking_sockets_serialized;
delete steam_gameserver_networking_messages;
delete steam_gameserver_game_coordinator;
delete steam_masterserver_updater;
delete steam_matchmaking;
delete steam_matchmaking_servers;
delete steam_user_stats;
delete steam_apps;
delete steam_networking;
delete steam_remote_storage;
delete steam_screenshots;
delete steam_http;
delete steam_controller;
delete steam_ugc;
delete steam_applist;
delete steam_music;
delete steam_musicremote;
delete steam_HTMLsurface;
delete steam_inventory;
delete steam_video;
delete steam_parental;
delete steam_networking_sockets;
delete steam_networking_sockets_serialized;
delete steam_networking_messages;
delete steam_game_coordinator;
delete steam_networking_utils;
delete steam_unified_messages;
delete steam_game_search;
delete steam_parties;
delete steam_remoteplay;
delete steam_tv;
delete steam_utils;
delete steam_friends;
delete steam_user;
delete steam_overlay;
delete run_every_runcb;
delete callbacks_server;
delete callbacks_client;
delete callback_results_server;
delete callback_results_client;
delete network;
}
void Steam_Client::userLogIn()
@ -825,7 +879,9 @@ bool Steam_Client::BShutdownIfAllPipesClosed()
if (!steam_pipes.size()) {
bool joinable = background_keepalive.joinable();
if (joinable) {
kill_background_thread_mutex.lock();
kill_background_thread = true;
kill_background_thread_mutex.unlock();
kill_background_thread_cv.notify_one();
}