mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
Fix freerdp_channels_process_message cleanup
Not all code paths did clean up the message, specifically WMQ_QUIT
This commit is contained in:
parent
49f9f5c265
commit
19ee9f0cce
@ -23,6 +23,8 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <winpr/assert.h>
|
||||||
|
|
||||||
#include <freerdp/log.h>
|
#include <freerdp/log.h>
|
||||||
#include <freerdp/channels/drdynvc.h>
|
#include <freerdp/channels/drdynvc.h>
|
||||||
|
|
||||||
@ -570,38 +572,45 @@ BOOL freerdp_channels_process_message_free(wMessage* message, DWORD type)
|
|||||||
|
|
||||||
static BOOL freerdp_channels_process_message(freerdp* instance, wMessage* message)
|
static BOOL freerdp_channels_process_message(freerdp* instance, wMessage* message)
|
||||||
{
|
{
|
||||||
if (message->id == WMQ_QUIT)
|
BOOL ret = TRUE;
|
||||||
{
|
BOOL rc = FALSE;
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message->id == 0)
|
WINPR_ASSERT(instance);
|
||||||
|
WINPR_ASSERT(message);
|
||||||
|
|
||||||
|
if (message->id == WMQ_QUIT)
|
||||||
|
goto fail;
|
||||||
|
else if (message->id == 0)
|
||||||
{
|
{
|
||||||
rdpMcsChannel* channel;
|
rdpMcsChannel* channel;
|
||||||
CHANNEL_OPEN_DATA* pChannelOpenData;
|
CHANNEL_OPEN_DATA* pChannelOpenData;
|
||||||
CHANNEL_OPEN_EVENT* item = (CHANNEL_OPEN_EVENT*)message->wParam;
|
CHANNEL_OPEN_EVENT* item = (CHANNEL_OPEN_EVENT*)message->wParam;
|
||||||
|
|
||||||
if (!item)
|
if (!item)
|
||||||
return FALSE;
|
goto fail;
|
||||||
|
|
||||||
pChannelOpenData = item->pChannelOpenData;
|
pChannelOpenData = item->pChannelOpenData;
|
||||||
if (pChannelOpenData->flags != 2)
|
if (pChannelOpenData->flags != 2)
|
||||||
{
|
{
|
||||||
freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_CANCELLED);
|
freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_CANCELLED);
|
||||||
return FALSE;
|
goto fail;
|
||||||
}
|
}
|
||||||
channel =
|
channel =
|
||||||
freerdp_channels_find_channel_by_name(instance->context->rdp, pChannelOpenData->name);
|
freerdp_channels_find_channel_by_name(instance->context->rdp, pChannelOpenData->name);
|
||||||
|
|
||||||
if (channel)
|
if (channel)
|
||||||
instance->SendChannelData(instance, channel->ChannelId, item->Data, item->DataLength);
|
ret = instance->SendChannelData(instance, channel->ChannelId, item->Data,
|
||||||
|
item->DataLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_COMPLETE))
|
if (!freerdp_channels_process_message_free(message, CHANNEL_EVENT_WRITE_COMPLETE))
|
||||||
return FALSE;
|
goto fail;
|
||||||
|
|
||||||
|
rc = ret;
|
||||||
|
|
||||||
|
fail:
|
||||||
IFCALL(message->Free, message);
|
IFCALL(message->Free, message);
|
||||||
return TRUE;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user