<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<STYLE>
BLOCKQUOTE {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 2em
}
OL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
UL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
BODY {
        LINE-HEIGHT: 1.5; FONT-FAMILY: 微软雅黑; COLOR: #000080; FONT-SIZE: 10.5pt
}
</STYLE>

<META name=GENERATOR content="MSHTML 9.00.8112.16443"></HEAD>
<BODY style="MARGIN: 10px">
<DIV style="COLOR: #000000">Finally, I found the memory leak place.</DIV>
<DIV style="COLOR: #000000">&nbsp;</DIV>
<DIV style="COLOR: #000000">I use valgrind memleak tool:</DIV>
<DIV style="COLOR: #000000">&nbsp;</DIV>
<DIV 
style="COLOR: #000000">valgrind&nbsp;--log-file=vg.out&nbsp;--tool=memcheck&nbsp;--leak-check=full&nbsp;-show-reachable=yes&nbsp;--leak-resolution=high 
</DIV>
<DIV style="COLOR: #000000">&nbsp;</DIV>
<DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;84,144,528&nbsp;bytes&nbsp;in&nbsp;237&nbsp;blocks&nbsp;are&nbsp;definitely&nbsp;lost&nbsp;in&nbsp;loss&nbsp;record&nbsp;8,054&nbsp;of&nbsp;8,056</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;0x4A054B6:&nbsp;malloc&nbsp;(vg_replace_malloc.c:236)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x364BC471BA:&nbsp;stream_mjpeg_data&nbsp;(channel-display-mjpeg.c:74)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x364BC45B61:&nbsp;display_stream_render&nbsp;(channel-display.c:967)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x3B2BE3961A:&nbsp;???&nbsp;(in&nbsp;/lib64/libglib-2.0.so.0.2200.5)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x3B2BE38F0D:&nbsp;g_main_context_dispatch&nbsp;(in&nbsp;/lib64/libglib-2.0.so.0.2200.5)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x3B2BE3C937:&nbsp;???&nbsp;(in&nbsp;/lib64/libglib-2.0.so.0.2200.5)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x3B2BE3CD54:&nbsp;g_main_loop_run&nbsp;(in&nbsp;/lib64/libglib-2.0.so.0.2200.5)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x3AE474C2C6:&nbsp;gtk_main&nbsp;(in&nbsp;/usr/lib64/libgtk-x11-2.0.so.0.1800.9)</DIV>
<DIV 
style="COLOR: #000000">==14112==&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x40145A:&nbsp;main&nbsp;(main.c:215)</DIV></DIV>
<DIV>&nbsp;</DIV>
<DIV style="COLOR: #000000">The log showed that nearly 84M memory leaks, it's 
not small.</DIV>
<DIV style="COLOR: #000000">&nbsp;</DIV>
<DIV style="COLOR: #000000">I have tried to fix it in destroy_stream() , </DIV>
<DIV style="COLOR: #000000">add two lines of code, Am I right?</DIV>
<DIV style="COLOR: #000000">&nbsp;</DIV>
<DIV style="COLOR: #000000">
<DIV style="COLOR: #ff0000; FONT-SIZE: 10.5pt; FONT-WEIGHT: normal">if (NULL != 
st-&gt;out_frame)</DIV>
<DIV 
style="TEXT-INDENT: 2em; COLOR: #ff0000; FONT-SIZE: 10.5pt; FONT-WEIGHT: normal">free(st-&gt;out_frame); 
</DIV></DIV>
<DIV>&nbsp;</DIV>
<DIV>// channel-display.c</DIV>
<DIV>
<DIV>static&nbsp;void&nbsp;destroy_stream(SpiceChannel&nbsp;*channel,&nbsp;int&nbsp;id)</DIV>
<DIV>{</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;SpiceDisplayChannelPrivate&nbsp;*c&nbsp;=&nbsp;SPICE_DISPLAY_CHANNEL(channel)-&gt;priv;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;display_stream&nbsp;*st;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;g_return_if_fail(c&nbsp;!=&nbsp;NULL);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;g_return_if_fail(c-&gt;streams&nbsp;!=&nbsp;NULL);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;=&nbsp;c-&gt;streams[id];</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!st)</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(st-&gt;codec)&nbsp;{</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;SPICE_VIDEO_CODEC_TYPE_MJPEG:</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream_mjpeg_cleanup(st);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;}</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(st-&gt;msg_clip)</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spice_msg_in_unref(st-&gt;msg_clip);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;spice_msg_in_unref(st-&gt;msg_create);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;g_queue_foreach(st-&gt;msgq,&nbsp;_msg_in_unref_func,&nbsp;NULL);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;g_queue_free(st-&gt;msgq);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(st-&gt;timeout&nbsp;!=&nbsp;0)</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_source_remove(st-&gt;timeout);</DIV>
<DIV style="COLOR: #ff0000; FONT-SIZE: 18pt; FONT-WEIGHT: bold">&nbsp;&nbsp;if 
(NULL != st-&gt;out_frame)</DIV>
<DIV 
style="TEXT-INDENT: 2em; COLOR: #ff0000; FONT-SIZE: 18pt; FONT-WEIGHT: bold">free(st-&gt;out_frame);&nbsp; 
</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;free(st);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;c-&gt;streams[id]&nbsp;=&nbsp;NULL;</DIV>
<DIV>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>Thanks!</DIV>
<DIV>&nbsp;</DIV></DIV>
<HR style="WIDTH: 210px; HEIGHT: 1px" align=left color=#b5c4df SIZE=1>

<DIV><SPAN>xufango</SPAN></DIV>
<DIV>&nbsp;</DIV>
<DIV 
style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<DIV 
style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; BACKGROUND: #efefef; COLOR: #000000; FONT-SIZE: 12px; PADDING-TOP: 8px">
<DIV><B>From:</B>&nbsp;<A href="mailto:yhalperi@redhat.com">Yonit 
Halperin</A></DIV>
<DIV><B>Date:</B>&nbsp;2012-03-19&nbsp;16:43</DIV>
<DIV><B>To:</B>&nbsp;<A href="mailto:mlureau@redhat.com">Marc-André Lureau</A>; 
<A href="mailto:mkrcmari@redhat.com">Marian Krcmarik</A></DIV>
<DIV><B>CC:</B>&nbsp;<A 
href="mailto:spice-devel@lists.freedesktop.org">spice-devel</A></DIV>
<DIV><B>Subject:</B>&nbsp;Re: [Spice-devel] [bug spice-gtk] spice-gtk memory 
leak</DIV></DIV></DIV>
<DIV>
<DIV>On&nbsp;03/16/2012&nbsp;08:13&nbsp;PM,&nbsp;Marc-André&nbsp;Lureau&nbsp;wrote:</DIV>
<DIV>&gt;</DIV>
<DIV>&gt;</DIV>
<DIV>&gt;&nbsp;-----&nbsp;Mensaje&nbsp;original&nbsp;-----</DIV>
<DIV>&gt;&gt;&gt;&nbsp;Also,&nbsp;running&nbsp;spicy&nbsp;under&nbsp;valgrind&nbsp;leak&nbsp;check&nbsp;tool&nbsp;shows&nbsp;quite</DIV>
<DIV>&gt;&gt;&gt;&nbsp;clearly</DIV>
<DIV>&gt;&gt;&gt;&nbsp;that&nbsp;there&nbsp;is&nbsp;nothing&nbsp;being&nbsp;leaked&nbsp;directly&nbsp;from&nbsp;spice-gtk,&nbsp;it</DIV>
<DIV>&gt;&gt;&gt;&nbsp;seems.</DIV>
<DIV>&gt;&gt;&nbsp;As&nbsp;I&nbsp;told&nbsp;you&nbsp;off-line,&nbsp;It&nbsp;happened&nbsp;to&nbsp;me&nbsp;that&nbsp;remote-viewer</DIV>
<DIV>&gt;&gt;&nbsp;(spice-gtk&nbsp;client)&nbsp;ended&nbsp;up&nbsp;in&nbsp;1.3GB,&nbsp;Unfortunately&nbsp;I&nbsp;am&nbsp;not&nbsp;able&nbsp;to</DIV>
<DIV>&gt;&gt;&nbsp;reproduce&nbsp;but&nbsp;I&nbsp;am&nbsp;getting&nbsp;400-500MB&nbsp;and&nbsp;massif&nbsp;does&nbsp;not&nbsp;show</DIV>
<DIV>&gt;&gt;&nbsp;anything&nbsp;to&nbsp;me&nbsp;:-/.</DIV>
<DIV>&gt;</DIV>
<DIV>&gt;&nbsp;Well,&nbsp;if&nbsp;you&nbsp;get&nbsp;400Mb&nbsp;of&nbsp;resident&nbsp;memory,&nbsp;I&nbsp;would&nbsp;really&nbsp;like&nbsp;to&nbsp;see&nbsp;the&nbsp;massif&nbsp;profile,&nbsp;please&nbsp;send&nbsp;it!</DIV>
<DIV>&gt;&nbsp;I&nbsp;couldn't&nbsp;get&nbsp;it&nbsp;above&nbsp;350Mb&nbsp;here,&nbsp;from&nbsp;which&gt;150Mb&nbsp;were&nbsp;image&nbsp;cache</DIV>
<DIV>&nbsp;</DIV>
<DIV>Hi,</DIV>
<DIV>&nbsp;</DIV>
<DIV>The&nbsp;default&nbsp;size&nbsp;of&nbsp;the&nbsp;cache&nbsp;is&nbsp;80MB&nbsp;(20&nbsp;Mega&nbsp;pixels).&nbsp;It&nbsp;shouldn't&nbsp;</DIV>
<DIV>have&nbsp;reached&nbsp;&gt;150MB.&nbsp;I've&nbsp;tracked&nbsp;the&nbsp;add/remove&nbsp;events&nbsp;from&nbsp;the&nbsp;cache,&nbsp;</DIV>
<DIV>and&nbsp;it&nbsp;looks&nbsp;stable&nbsp;around&nbsp;20&nbsp;Mega&nbsp;pixels.</DIV>
<DIV>I&nbsp;don't&nbsp;manage&nbsp;to&nbsp;get&nbsp;more&nbsp;than&nbsp;150MB&nbsp;resident&nbsp;memory&nbsp;for&nbsp;the&nbsp;remote-viewer.</DIV>
<DIV>Marian,&nbsp;can&nbsp;you&nbsp;describe&nbsp;how&nbsp;you&nbsp;manage&nbsp;to&nbsp;reach&nbsp;more&nbsp;the&nbsp;400MB?&nbsp;</DIV>
<DIV>Multiple&nbsp;monitors?&nbsp;How&nbsp;long&nbsp;was&nbsp;the&nbsp;remote&nbsp;viewer&nbsp;alive?&nbsp;What&nbsp;guest&nbsp;</DIV>
<DIV>operations&nbsp;did&nbsp;you&nbsp;do?&nbsp;Does&nbsp;it&nbsp;happen&nbsp;if&nbsp;on&nbsp;the&nbsp;qemu&nbsp;side&nbsp;you&nbsp;set&nbsp;</DIV>
<DIV>image-compression=quic&nbsp;(instead&nbsp;of&nbsp;auto-glz)?</DIV>
<DIV>&nbsp;</DIV>
<DIV>Thanks,</DIV>
<DIV>Yonit.</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&gt;&nbsp;_______________________________________________</DIV>
<DIV>&gt;&nbsp;Spice-devel&nbsp;mailing&nbsp;list</DIV>
<DIV>&gt;&nbsp;Spice-devel@lists.freedesktop.org</DIV>
<DIV>&gt;&nbsp;http://lists.freedesktop.org/mailman/listinfo/spice-devel</DIV>
<DIV>&nbsp;</DIV>
<DIV>_______________________________________________</DIV>
<DIV>Spice-devel&nbsp;mailing&nbsp;list</DIV>
<DIV>Spice-devel@lists.freedesktop.org</DIV>
<DIV>http://lists.freedesktop.org/mailman/listinfo/spice-devel</DIV></DIV></BODY></HTML>