From 71f88e9049d15f41abd0eb703e3faec5fac4b6b5 Mon Sep 17 00:00:00 2001 From: Tomasz Lemiech Date: Fri, 12 Nov 2021 18:43:32 +0100 Subject: [PATCH] ksmserver: reject new clients when shutting down When ksmserver is about to shut down and in the process of killing its clients, it shouldn't accept connections from new clients. BUG: 432643 --- ksmserver/server.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ksmserver/server.cpp b/ksmserver/server.cpp index ff22a336d..68fe3cb12 100644 --- a/ksmserver/server.cpp +++ b/ksmserver/server.cpp @@ -457,6 +457,15 @@ static Status KSMNewClientProc(SmsConn conn, SmPointer manager_data, unsigned lo *failure_reason_ret = nullptr; void *client = ((KSMServer *)manager_data)->newClient(conn); + if(client == NULL) { + const char *errstr = "Connection rejected: ksmserver is shutting down"; + qCWarning(KSMSERVER, "%s", errstr); + + if ((*failure_reason_ret = (char *)malloc(strlen(errstr) + 1)) != NULL) { + strcpy(*failure_reason_ret, errstr); + } + return 0; + } cb->register_client.callback = KSMRegisterClientProc; cb->register_client.manager_data = client; @@ -690,8 +699,11 @@ void KSMServer::processData(int /*socket*/) KSMClient *KSMServer::newClient(SmsConn conn) { - KSMClient *client = new KSMClient(conn); - clients.append(client); + KSMClient *client = nullptr; + if(state != Killing) { + client = new KSMClient(conn); + clients.append(client); + } return client; }