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 2015 Thincast Technologies GmbH
|
||||
* 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");
|
||||
* 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)
|
||||
{
|
||||
DISP_PLUGIN* disp = (DISP_PLUGIN*) pPlugin;
|
||||
free(disp->listener_callback);
|
||||
free(disp->iface.pInterface);
|
||||
free(pPlugin);
|
||||
return CHANNEL_RC_OK;
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Copyright 2015 Thincast Technologies GmbH
|
||||
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.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");
|
||||
* 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);
|
||||
|
||||
free(printer_dev->device.name);
|
||||
Stream_Free(printer_dev->device.data, TRUE);
|
||||
|
||||
free(printer_dev);
|
||||
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 DI (FH) Martin Haimberger <martin.haimberger@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");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -890,6 +891,7 @@ out:
|
||||
if (error && rdpdr->rdpcontext)
|
||||
setChannelError(rdpdr->rdpcontext, error, "drive_hotplug_thread_func reported an error");
|
||||
|
||||
CloseHandle(rdpdr->stopEvent);
|
||||
ExitThread((DWORD)error);
|
||||
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;
|
||||
|
||||
CopyMemory(audioBuffer->mAudioData, wave->data, length);
|
||||
free(wave->data);
|
||||
wave->data = NULL;
|
||||
audioBuffer->mAudioDataByteSize = length;
|
||||
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 2015 Thincast Technologies GmbH
|
||||
* 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");
|
||||
* 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;
|
||||
|
||||
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);
|
||||
break;
|
||||
}
|
||||
|
@ -6,6 +6,7 @@
|
||||
* Copyright 2010-2012 Vic Lee
|
||||
* Copyright 2015 Thincast Technologies GmbH
|
||||
* 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");
|
||||
* 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);
|
||||
|
||||
free(lpWaveHdr->lpData);
|
||||
free(lpWaveHdr);
|
||||
|
||||
free(wave);
|
||||
}
|
||||
@ -330,6 +332,7 @@ void rdpsnd_winmm_wave_play(rdpsndDevicePlugin* device, RDPSND_WAVE* wave)
|
||||
{
|
||||
WLog_ERR(TAG, "waveOutWrite failure: %d", mmResult);
|
||||
waveOutUnprepareHeader(winmm->hWaveOut, lpWaveHdr, sizeof(WAVEHDR));
|
||||
free(lpWaveHdr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
* Copyright 2011 Anthony Tong <atong@trustedcs.com>
|
||||
* Copyright 2015 Thincast Technologies GmbH
|
||||
* 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");
|
||||
* 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)
|
||||
{
|
||||
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 == CHANNEL_RC_NOT_CONNECTED)
|
||||
{
|
||||
error = CHANNEL_RC_OK;
|
||||
goto out;
|
||||
}
|
||||
WLog_ERR(TAG, "smartcard_complete_irp failed with error %lu!", error);
|
||||
goto out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user