GUACAMOLE-1181: Only free wStream after send if FreeRDP requires this.
This commit is contained in:
parent
2c86e20ab9
commit
256487c95a
25
configure.ac
25
configure.ac
@ -623,7 +623,7 @@ then
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Variation in memory internal allocation/free behavior
|
# Variation in memory internal allocation/free behavior for bitmaps
|
||||||
if test "x${have_freerdp2}" = "xyes"
|
if test "x${have_freerdp2}" = "xyes"
|
||||||
then
|
then
|
||||||
|
|
||||||
@ -647,6 +647,29 @@ then
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Variation in memory internal allocation/free behavior for channel streams
|
||||||
|
if test "x${have_freerdp2}" = "xyes"
|
||||||
|
then
|
||||||
|
|
||||||
|
# FreeRDP 2.0.0-rc3 through 2.0.0-rc4 automatically free the wStream
|
||||||
|
# provided to pVirtualChannelWriteEx(). This changed in commit 1b78b59, and
|
||||||
|
# implementations must manually free the wStream after it is no longer
|
||||||
|
# needed (after the write is complete or cancelled).
|
||||||
|
AC_MSG_CHECKING([whether pVirtualChannelWriteEx() frees the wStream upon completion])
|
||||||
|
AC_EGREP_CPP([\"2\\.0\\.0-(rc|dev)[3-4]\"], [
|
||||||
|
|
||||||
|
#include <freerdp/version.h>
|
||||||
|
FREERDP_VERSION_FULL
|
||||||
|
|
||||||
|
],
|
||||||
|
[AC_MSG_RESULT([yes])]
|
||||||
|
[AC_DEFINE([FREERDP_SVC_CORE_FREES_WSTREAM],,
|
||||||
|
[Whether pVirtualChannelWriteEx() frees the wStream upon completion])],
|
||||||
|
[AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Glyph callback variants
|
# Glyph callback variants
|
||||||
if test "x${have_freerdp2}" = "xyes"
|
if test "x${have_freerdp2}" = "xyes"
|
||||||
then
|
then
|
||||||
|
@ -81,12 +81,14 @@ static VOID guac_rdp_common_svc_handle_open_event(LPVOID user_param,
|
|||||||
DWORD open_handle, UINT event, LPVOID data, UINT32 data_length,
|
DWORD open_handle, UINT event, LPVOID data, UINT32 data_length,
|
||||||
UINT32 total_length, UINT32 data_flags) {
|
UINT32 total_length, UINT32 data_flags) {
|
||||||
|
|
||||||
|
#ifndef FREERDP_SVC_CORE_FREES_WSTREAM
|
||||||
/* Free stream data after send is complete */
|
/* Free stream data after send is complete */
|
||||||
if ((event == CHANNEL_EVENT_WRITE_CANCELLED
|
if ((event == CHANNEL_EVENT_WRITE_CANCELLED
|
||||||
|| event == CHANNEL_EVENT_WRITE_COMPLETE) && data != NULL) {
|
|| event == CHANNEL_EVENT_WRITE_COMPLETE) && data != NULL) {
|
||||||
Stream_Free((wStream*) data, TRUE);
|
Stream_Free((wStream*) data, TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Ignore all events except for received data */
|
/* Ignore all events except for received data */
|
||||||
if (event != CHANNEL_EVENT_DATA_RECEIVED)
|
if (event != CHANNEL_EVENT_DATA_RECEIVED)
|
||||||
|
Loading…
Reference in New Issue
Block a user