<div>Lock-free reference counting is hard to be implemented on architectures without double compare-and-swap instruction(one possible solution is binding counter with the pointer). The overhead of reference counting may be significant.</div>


<div> </div>
<div> </div>
<div>Thanks.</div>
<div>Haoxiang Lin<br></div>
<div class="gmail_quote">2010/11/24 Dana Jansens <span dir="ltr">&lt;<a href="mailto:dana@orodu.net">dana@orodu.net</a>&gt;</span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">2010/11/23 林昊翔 &lt;<a href="mailto:linhaoxiang@gmail.com">linhaoxiang@gmail.com</a>&gt;:<br>
<div class="im">&gt; I think the best way is borrowing constructor and destructor concepts from<br>&gt; C++. For each internal data structure foo, maintain a foo_create function as<br>&gt; the constructor(many data structures are already done), and a foo_destroy<br>

&gt; function as the destructor. Then we avoid duplicate and complicate clean<br>&gt; work at each failure exit in foo_create.<br><br></div>In my own experience, using an unref() (and ref()) - ie. reference<br>counting - for all objects, rather than a destroy(), always pays off.<br>

<br>- Dana<br>
<div class="im"><br>&gt; 2010/11/23 Kristian Høgsberg &lt;<a href="mailto:krh@bitplanet.net">krh@bitplanet.net</a>&gt;<br>&gt;&gt;<br>&gt;&gt; On Wed, Nov 17, 2010 at 10:16 PM, 林昊翔 &lt;<a href="mailto:linhaoxiang@gmail.com">linhaoxiang@gmail.com</a>&gt; wrote:<br>

&gt;&gt; &gt; The scenario is:<br>&gt;&gt; &gt; struct A *foo()<br>&gt;&gt; &gt; {<br>&gt;&gt; &gt;     A *a;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;     a = malloc(sizeof(A));<br>&gt;&gt; &gt;     if (a == NULL)<br>&gt;&gt; &gt;         return NULL;<br>

&gt;&gt; &gt;<br>&gt;&gt; &gt;     a-&gt;b = malloc(sizeof(B));<br>&gt;&gt; &gt;     if (a-&gt;b == NULL)<br>&gt;&gt; &gt;         return NULL;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;     return a;<br>&gt;&gt; &gt; }<br>&gt;&gt;<br>

&gt;&gt; You&#39;re right, there&#39;s a bunch of those in the code.  Could you please<br>&gt;&gt; create your patches by committing the changes and then either attach<br>&gt;&gt; the output of git format-patch -1 (where -1 means &quot;one commit&quot;, use<br>

&gt;&gt; whatever number of patches you have) or even better use git send-email<br>&gt;&gt; -1 --to=<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a>.<br>&gt;&gt;<br>&gt;&gt; Thanks,<br>

&gt;&gt; Kristian<br>&gt;<br>&gt;<br></div>&gt; _______________________________________________<br>&gt; wayland-devel mailing list<br>
<div class="im">&gt; <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br></div>&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></blockquote></div><br>