mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
core: Cleanup channel structs in close to allow instance reuse
This commit is contained in:
@@ -106,9 +106,6 @@ error:
|
||||
|
||||
void freerdp_channels_free(rdpChannels* channels)
|
||||
{
|
||||
int index;
|
||||
CHANNEL_OPEN_DATA* pChannelOpenData;
|
||||
|
||||
if (!channels)
|
||||
return;
|
||||
|
||||
@@ -120,23 +117,6 @@ void freerdp_channels_free(rdpChannels* channels)
|
||||
channels->queue = NULL;
|
||||
}
|
||||
|
||||
for (index = 0; index < channels->clientDataCount; index++)
|
||||
{
|
||||
pChannelOpenData = &channels->openDataList[index];
|
||||
|
||||
if (pChannelOpenData->pInterface)
|
||||
{
|
||||
free(pChannelOpenData->pInterface);
|
||||
pChannelOpenData->pInterface = NULL;
|
||||
}
|
||||
|
||||
freerdp_channel_remove_open_handle_data(&g_ChannelHandles, pChannelOpenData->OpenHandle);
|
||||
|
||||
if (channels->openHandles)
|
||||
HashTable_Remove(channels->openHandles,
|
||||
(void*)(UINT_PTR)pChannelOpenData->OpenHandle);
|
||||
}
|
||||
|
||||
if (channels->openHandles)
|
||||
HashTable_Free(channels->openHandles);
|
||||
|
||||
@@ -655,6 +635,7 @@ UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
|
||||
void freerdp_channels_close(rdpChannels* channels, freerdp* instance)
|
||||
{
|
||||
int index;
|
||||
CHANNEL_OPEN_DATA* pChannelOpenData;
|
||||
CHANNEL_CLIENT_DATA* pChannelClientData;
|
||||
freerdp_channels_check_fds(channels, instance);
|
||||
|
||||
@@ -675,7 +656,29 @@ void freerdp_channels_close(rdpChannels* channels, freerdp* instance)
|
||||
}
|
||||
}
|
||||
|
||||
channels->clientDataCount = 0;
|
||||
MessageQueue_PostQuit(channels->queue, 0);
|
||||
|
||||
for (index = 0; index < channels->openDataCount; index++)
|
||||
{
|
||||
pChannelOpenData = &channels->openDataList[index];
|
||||
|
||||
if (pChannelOpenData->pInterface)
|
||||
{
|
||||
free(pChannelOpenData->pInterface);
|
||||
pChannelOpenData->pInterface = NULL;
|
||||
}
|
||||
|
||||
freerdp_channel_remove_open_handle_data(&g_ChannelHandles, pChannelOpenData->OpenHandle);
|
||||
|
||||
if (channels->openHandles)
|
||||
HashTable_Remove(channels->openHandles,
|
||||
(void*)(UINT_PTR)pChannelOpenData->OpenHandle);
|
||||
}
|
||||
|
||||
channels->openDataCount = 0;
|
||||
channels->initDataCount = 0;
|
||||
instance->settings->ChannelCount = 0;
|
||||
}
|
||||
|
||||
static UINT VCAPITYPE FreeRDP_VirtualChannelInitEx(LPVOID lpUserParam, LPVOID clientContext,
|
||||
|
||||
Reference in New Issue
Block a user