Close SVC channels in WTSVirtualChannelClose

This commit is contained in:
Armin Novak 2021-10-18 11:36:14 +02:00 committed by akallabeth
parent 17d40edf5b
commit 990400aedd

View File

@ -852,6 +852,12 @@ static void wts_virtual_channel_manager_free_message(void* obj)
static void channel_free(rdpPeerChannel* channel);
static void array_channel_free(void* ptr)
{
rdpPeerChannel* channel = ptr;
channel_free(channel);
}
HANDLE WINAPI FreeRDP_WTSOpenServerA(LPSTR pServerName)
{
rdpContext* context;
@ -908,7 +914,7 @@ HANDLE WINAPI FreeRDP_WTSOpenServerA(LPSTR pServerName)
{
wObject* obj = ArrayList_Object(vcm->dynamicVirtualChannels);
WINPR_ASSERT(obj);
obj->fnObjectFree = channel_free;
obj->fnObjectFree = array_channel_free;
}
client->ReceiveChannelData = WTSReceiveChannelData;
hServer = (HANDLE)vcm;
@ -943,7 +949,6 @@ VOID WINAPI FreeRDP_WTSCloseServer(HANDLE hServer)
{
HashTable_Remove(g_ServerHandles, (void*)(UINT_PTR)vcm->SessionId);
ArrayList_Clear(vcm->dynamicVirtualChannels);
ArrayList_Free(vcm->dynamicVirtualChannels);
if (vcm->drdynvc_channel)
@ -1160,7 +1165,7 @@ HANDLE WINAPI FreeRDP_WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId, LPS
rdpMcs* mcs;
rdpMcsChannel* joined_channel = NULL;
freerdp_peer* client;
rdpPeerChannel* channel;
rdpPeerChannel* channel = NULL;
WTSVirtualChannelManager* vcm;
HANDLE hChannelHandle = NULL;
vcm = (WTSVirtualChannelManager*)hServer;
@ -1330,6 +1335,9 @@ BOOL WINAPI FreeRDP_WTSVirtualChannelClose(HANDLE hChannelHandle)
if (channel->index < mcs->channelCount)
{
rdpMcsChannel* cur = &mcs->channels[channel->index];
rdpPeerChannel* peerChannel = (rdpPeerChannel*)cur->handle;
if (peerChannel)
channel_free(peerChannel);
cur->handle = NULL;
}
}