Merge pull request #3501 from DavBfr/fix-few-memory-leaks
Fix few memory leaks
This commit is contained in:
commit
dbb353db92
4
channels/disp/client/disp_main.c
Normal file → Executable file
4
channels/disp/client/disp_main.c
Normal file → Executable file
@ -5,6 +5,7 @@
|
|||||||
* Copyright 2013 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
* Copyright 2013 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||||||
* Copyright 2015 Thincast Technologies GmbH
|
* Copyright 2015 Thincast Technologies GmbH
|
||||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
||||||
|
* Copyright 2016 David PHAM-VAN <d.phamvan@inuvika.com>
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -317,6 +318,9 @@ static UINT disp_plugin_initialize(IWTSPlugin* pPlugin, IWTSVirtualChannelManage
|
|||||||
*/
|
*/
|
||||||
static UINT disp_plugin_terminated(IWTSPlugin* pPlugin)
|
static UINT disp_plugin_terminated(IWTSPlugin* pPlugin)
|
||||||
{
|
{
|
||||||
|
DISP_PLUGIN* disp = (DISP_PLUGIN*) pPlugin;
|
||||||
|
free(disp->listener_callback);
|
||||||
|
free(disp->iface.pInterface);
|
||||||
free(pPlugin);
|
free(pPlugin);
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* Copyright 2015 Thincast Technologies GmbH
|
* Copyright 2015 Thincast Technologies GmbH
|
||||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
||||||
* Copyright 2016 Armin Novak <armin.novak@gmail.com>
|
* Copyright 2016 Armin Novak <armin.novak@gmail.com>
|
||||||
|
* Copyright 2016 David PHAM-VAN <d.phamvan@inuvika.com>
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -316,6 +317,7 @@ static UINT printer_free(DEVICE* device)
|
|||||||
printer_dev->printer->Free(printer_dev->printer);
|
printer_dev->printer->Free(printer_dev->printer);
|
||||||
|
|
||||||
free(printer_dev->device.name);
|
free(printer_dev->device.name);
|
||||||
|
Stream_Free(printer_dev->device.data, TRUE);
|
||||||
|
|
||||||
free(printer_dev);
|
free(printer_dev);
|
||||||
return CHANNEL_RC_OK;
|
return CHANNEL_RC_OK;
|
||||||
|
2
channels/rdpdr/client/rdpdr_main.c
Normal file → Executable file
2
channels/rdpdr/client/rdpdr_main.c
Normal file → Executable file
@ -7,6 +7,7 @@
|
|||||||
* Copyright 2015-2016 Thincast Technologies GmbH
|
* Copyright 2015-2016 Thincast Technologies GmbH
|
||||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
||||||
* Copyright 2016 Armin Novak <armin.novak@thincast.com>
|
* Copyright 2016 Armin Novak <armin.novak@thincast.com>
|
||||||
|
* Copyright 2016 David PHAM-VAN <d.phamvan@inuvika.com>
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -890,6 +891,7 @@ out:
|
|||||||
if (error && rdpdr->rdpcontext)
|
if (error && rdpdr->rdpcontext)
|
||||||
setChannelError(rdpdr->rdpcontext, error, "drive_hotplug_thread_func reported an error");
|
setChannelError(rdpdr->rdpcontext, error, "drive_hotplug_thread_func reported an error");
|
||||||
|
|
||||||
|
CloseHandle(rdpdr->stopEvent);
|
||||||
ExitThread((DWORD)error);
|
ExitThread((DWORD)error);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -327,6 +327,8 @@ static void rdpsnd_mac_waveplay(rdpsndDevicePlugin* device, RDPSND_WAVE* wave)
|
|||||||
length = wave->length > audioBuffer->mAudioDataBytesCapacity ? audioBuffer->mAudioDataBytesCapacity : wave->length;
|
length = wave->length > audioBuffer->mAudioDataBytesCapacity ? audioBuffer->mAudioDataBytesCapacity : wave->length;
|
||||||
|
|
||||||
CopyMemory(audioBuffer->mAudioData, wave->data, length);
|
CopyMemory(audioBuffer->mAudioData, wave->data, length);
|
||||||
|
free(wave->data);
|
||||||
|
wave->data = NULL;
|
||||||
audioBuffer->mAudioDataByteSize = length;
|
audioBuffer->mAudioDataByteSize = length;
|
||||||
audioBuffer->mUserData = wave;
|
audioBuffer->mUserData = wave;
|
||||||
|
|
||||||
|
4
channels/rdpsnd/client/rdpsnd_main.c
Normal file → Executable file
4
channels/rdpsnd/client/rdpsnd_main.c
Normal file → Executable file
@ -7,6 +7,7 @@
|
|||||||
* Copyright 2012-2013 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
* Copyright 2012-2013 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||||||
* Copyright 2015 Thincast Technologies GmbH
|
* Copyright 2015 Thincast Technologies GmbH
|
||||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
||||||
|
* Copyright 2016 David PHAM-VAN <d.phamvan@inuvika.com>
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -1476,6 +1477,9 @@ static VOID VCAPITYPE rdpsnd_virtual_channel_init_event(LPVOID pInitHandle, UINT
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CHANNEL_EVENT_TERMINATED:
|
case CHANNEL_EVENT_TERMINATED:
|
||||||
|
if (plugin->thread != NULL)
|
||||||
|
if ((error = rdpsnd_virtual_channel_event_disconnected(plugin)))
|
||||||
|
WLog_ERR(TAG, "rdpsnd_virtual_channel_event_disconnected failed with error %lu!", error);
|
||||||
rdpsnd_virtual_channel_event_terminated(plugin);
|
rdpsnd_virtual_channel_event_terminated(plugin);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* Copyright 2010-2012 Vic Lee
|
* Copyright 2010-2012 Vic Lee
|
||||||
* Copyright 2015 Thincast Technologies GmbH
|
* Copyright 2015 Thincast Technologies GmbH
|
||||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
||||||
|
* Copyright 2016 David PHAM-VAN <d.phamvan@inuvika.com>
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -136,6 +137,7 @@ static void CALLBACK rdpsnd_winmm_callback_function(HWAVEOUT hwo, UINT uMsg, DWO
|
|||||||
winmm->device.WaveConfirm(&(winmm->device), wave);
|
winmm->device.WaveConfirm(&(winmm->device), wave);
|
||||||
|
|
||||||
free(lpWaveHdr->lpData);
|
free(lpWaveHdr->lpData);
|
||||||
|
free(lpWaveHdr);
|
||||||
|
|
||||||
free(wave);
|
free(wave);
|
||||||
}
|
}
|
||||||
@ -330,6 +332,7 @@ void rdpsnd_winmm_wave_play(rdpsndDevicePlugin* device, RDPSND_WAVE* wave)
|
|||||||
{
|
{
|
||||||
WLog_ERR(TAG, "waveOutWrite failure: %d", mmResult);
|
WLog_ERR(TAG, "waveOutWrite failure: %d", mmResult);
|
||||||
waveOutUnprepareHeader(winmm->hWaveOut, lpWaveHdr, sizeof(WAVEHDR));
|
waveOutUnprepareHeader(winmm->hWaveOut, lpWaveHdr, sizeof(WAVEHDR));
|
||||||
|
free(lpWaveHdr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
* Copyright 2011 Anthony Tong <atong@trustedcs.com>
|
* Copyright 2011 Anthony Tong <atong@trustedcs.com>
|
||||||
* Copyright 2015 Thincast Technologies GmbH
|
* Copyright 2015 Thincast Technologies GmbH
|
||||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
|
||||||
|
* Copyright 2016 David PHAM-VAN <d.phamvan@inuvika.com>
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -230,6 +231,13 @@ static void smartcard_release_all_contexts(SMARTCARD_DEVICE* smartcard) {
|
|||||||
if (SCardIsValidContext(hContext) == SCARD_S_SUCCESS)
|
if (SCardIsValidContext(hContext) == SCARD_S_SUCCESS)
|
||||||
{
|
{
|
||||||
SCardReleaseContext(hContext);
|
SCardReleaseContext(hContext);
|
||||||
|
|
||||||
|
if (MessageQueue_PostQuit(pContext->IrpQueue, 0) && (WaitForSingleObject(pContext->thread, INFINITE) == WAIT_FAILED))
|
||||||
|
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", GetLastError());
|
||||||
|
|
||||||
|
CloseHandle(pContext->thread);
|
||||||
|
MessageQueue_Free(pContext->IrpQueue);
|
||||||
|
free(pContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -632,6 +640,11 @@ static void* smartcard_thread_func(void* arg)
|
|||||||
|
|
||||||
if ((error = smartcard_complete_irp(smartcard, irp)))
|
if ((error = smartcard_complete_irp(smartcard, irp)))
|
||||||
{
|
{
|
||||||
|
if (error == CHANNEL_RC_NOT_CONNECTED)
|
||||||
|
{
|
||||||
|
error = CHANNEL_RC_OK;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
WLog_ERR(TAG, "smartcard_complete_irp failed with error %lu!", error);
|
WLog_ERR(TAG, "smartcard_complete_irp failed with error %lu!", error);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user