<div>Second try.<br><br></div><div>Regards,</div><div>Iskren</div><div><br><div class="gmail_quote">On Sat, Mar 12, 2011 at 2:28 PM, Marty Jack <span dir="ltr">&lt;<a href="mailto:martyj19@comcast.net">martyj19@comcast.net</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I have never encountered a system where it was believed to be desirable to allow something to be removed twice.  It is important to keep data structures clean.  If anything you would be more likely to see a debugging mode where the lists were fully checked after every insert or remove to make sure they are internally consistent, especially if they are important to keeping the system running.  It&#39;s not that much different from memory allocation.  A block is allocated, or it is free, and a double free is a bug.<br>


<div class="im"><br>
On 03/12/2011 07:01 AM, Iskren Chernev wrote:<br>
&gt; Well, the actual problem is that something was removed twice. And I know where this place is, but I couldn&#39;t know if you would like to remove elements multiple times with no problems, or treat the list very carefully and remove elements only once. But then there should be a way to know if an element is already in a list or not. So if there is a way to know that, why not make a check inside wl_list_remove, just to make sure.<br>


&gt;<br>
&gt; I&#39;ll fix it the way you want it to be :)<br>
&gt;<br>
&gt; Regards,<br>
&gt; Iskren<br>
&gt;<br>
</div><div class="im">&gt; On Sat, Mar 12, 2011 at 1:07 PM, Marty Jack &lt;<a href="mailto:martyj19@comcast.net">martyj19@comcast.net</a> &lt;mailto:<a href="mailto:martyj19@comcast.net">martyj19@comcast.net</a>&gt;&gt; wrote:<br>


&gt;<br>
&gt;<br>
&gt;<br>
&gt;     On 03/11/2011 07:32 PM, Iskren Chernev wrote:<br>
&gt;     &gt; Hello,<br>
&gt;     &gt;<br>
&gt;     &gt; I found a bug and fixed it with the patch :)<br>
&gt;     &gt;<br>
&gt;     &gt; *to reproduce:*<br>
&gt;     &gt; run compositor on top of x11<br>
&gt;     &gt;<br>
&gt;     &gt; repeat<br>
&gt;     &gt;    run flower<br>
&gt;     &gt;    drag &amp; drop it a little<br>
&gt;     &gt;    move the pointer in and out of the compositor/flower<br>
&gt;     &gt;    Ctrl+C the flower client<br>
&gt;     &gt;<br>
&gt;     &gt; it would break eventually<br>
&gt;     &gt;<br>
&gt;     &gt; *problem:*<br>
&gt;     &gt; I found that the linked list surface-&gt;destroy_listener_list got corrupted at some point (it was not circular any more, strange next/prev etc), which causes the crash.<br>
&gt;     &gt;<br>
&gt;     &gt; *solution:*<br>
&gt;     &gt; The problem was in wl_list_remove -- when you erase an element, you don&#39;t mark it as &#39;erased&#39;, by setting prev/next to NULL for example. Then if you erase it again the list becomes corrupt. I nullified the prev/next and check in the begining of wl_list_remove for not-in-list elements and just ignore them. That seems to fix it.<br>


&gt;     &gt;<br>
&gt;     &gt; Regards,<br>
&gt;     &gt; Iskren<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt; _______________________________________________<br>
&gt;     &gt; wayland-devel mailing list<br>
</div>&gt;     &gt; <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a> &lt;mailto:<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a>&gt;<br>


<div class="im">&gt;     &gt; <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
&gt;<br>
&gt;     Unfortunately your fix only papers over the real problem, which is that the list got corrupted at some point.  It would not actually solve the problem.  The source of the corruption needs to be located and fixed; it could be removing something twice, inserting something twice, or the like.  You could push ahead with this if you were interested.<br>


&gt;     _______________________________________________<br>
&gt;     wayland-devel mailing list<br>
</div>&gt;     <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a> &lt;mailto:<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a>&gt;<br>
<div><div></div><div class="h5">&gt;     <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>