Hi Armin, Thanks for being on this! Does xfreerdp use FreeRDP_VirtualChannelWriteEx to send the file chunks? This is the case with Guacamole 1.2.0 - it calls FreeRDP_VirtualChannelWriteEx (via the pVirtualChannelWriteEx entry point) for each buffer of file data, wrapped in a wStream that is earlier created using Stream_New in the Guacamole code. So in fact a new wStream is allocated for each call to FreeRDP_VirtualChannelWriteEx. Is this the intended method? Does xfreerdp handle it differently?
Thanks, Jonatan ---------- Forwarded message --------- From: Armin Novak via FreeRDP-devel <freerdp-devel@lists.sourceforge.net> Date: Wed, Sep 2, 2020 at 11:25 AM Subject: Re: [FreeRDP-devel] Fwd: Memory not being freed during file copy via an RDP session To: <freerdp-devel@lists.sourceforge.net> Some follow up: debugged the whole thing a bit with current xfreerdp from 68c7bcc6501b6df12ad75d65c7b4c2685fb755e4 I could not get any stream in the pool to grow beyond 162k The chunks that get copied (released with Stream_Free) are 2MB during file copy from xfreerdp host to RDP server. regards Armin On 01.09.20 15:52, Armin Novak via FreeRDP-devel wrote: > Hi Jonatan, > > > No, the dynamic channel write method is internal to libfreerdp2.so, so > you should not have to do anything there. > > Could you clarify which stream is growing so large? > > All buffers should be much smaller even with large files. > > > regards > > Armin > > On 01.09.20 15:19, Jonatan Volkov via FreeRDP-devel wrote: >> Hi Armin, >> >> Thank you for your reply. >> I am talking about copying a file via a shared drive. >> >> Meanwhile we have seen that FreeRDP 2.0.0 was using Stream_Free() to free >> the wStream that was initially passed to FreeRDP_VirtualChannelWriteEx, >> while 2.2.0 uses Stream_Release. >> It is most likely that the current implementation in Guacamole server is >> still aligned for the 2.0.0 way. >> If we are copying a large file (several GB) then memory can run out during >> the copy operation itself, so only releasing the buffers after the file is >> finished copying does not cover us. Or maybe I misunderstood the usage you >> propose for CHANNEL_EVENT_WRITE_COMPLETE ? >> >> Thanks! >> Jonatan >> >> >> ---------- Forwarded message --------- >> From: Armin Novak via FreeRDP-devel <freerdp-devel@lists.sourceforge.net> >> Date: Tue, Sep 1, 2020 at 10:27 AM >> Subject: Re: [FreeRDP-devel] Memory not being freed during file copy via an >> RDP session >> To: <freerdp-devel@lists.sourceforge.net> >> >> >> Hi, >> >> >> could you please clarify a bit? >> >> Are you talking about using a shared drive or clipboard file copy? >> >> >> As for FreeRDP_VirtualChannelWriteEx, you need to listen for >> CHANNEL_EVENT_WRITE_COMPLETE and free any buffer supplied before there. >> (see any of the channels like clipboard using that) >> >> >> regards >> >> Armin >> >> On 31.08.20 23:09, Jonatan Volkov via FreeRDP-devel wrote: >>> Hi all, >>> >>> I am trying to hunt down an issue where during an RDP session via Apache >>> Gaucamole, copying a file from a shared directory/drive to any location on >>> the RDP server reserves memory that never gets freed. This leak eventually >>> brings down the guac session process after ~3GB have been copied in such a >>> way (on a weak machine). >>> We are getting this with Guacamole 1.2.0 (over FreeRDP 2.2.0) - was not >>> happening with Guacamole 1.0.0 (over FreeRDP 1.1). >>> >>> Using valgrind we have tracked the problem to the repeated calls to >>> FreeRDP_VirtualChannelWriteEx containing chunks of the copied file. The >>> arguments include a wStream object that was earlier created via >> Stream_New. >>> It appears, and the valgrind trace supports it, that this wStream instance >>> never gets freed by FreeRDP. >>> >>> I could not find an open issue or discussions on it. Has anyone >> encountered >>> this problem, or in general has any idea regarding the root cause of this >>> leak? >>> Should we be using the StreamPool from the external code (Guacamole in >>> fact) rather than creating a new instance of the stream for each write >>> operation? >>> >>> Thanks! Regards, >>> Jonatan >>> >>> _______________________________________________ >>> FreeRDP-devel mailing list >>> FreeRDP-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/freerdp-devel >> _______________________________________________ >> FreeRDP-devel mailing list >> FreeRDP-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/freerdp-devel >> >> _______________________________________________ >> FreeRDP-devel mailing list >> FreeRDP-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/freerdp-devel > > _______________________________________________ > FreeRDP-devel mailing list > FreeRDP-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/freerdp-devel _______________________________________________ FreeRDP-devel mailing list FreeRDP-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freerdp-devel _______________________________________________ FreeRDP-devel mailing list FreeRDP-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freerdp-devel