I&#39;m sorry..<div>Thank you Duncan for your support.<br><br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Duncan Grisby</b> <span dir="ltr">&lt;<a href="mailto:duncan@grisby.org">duncan@grisby.org</a>&gt;</span><br>
Date: 2011/10/17<br>Subject: Re: Possible bug in &quot;T_var&amp; operator= (T_ptr p)&quot; operators<br>To: Tatiana Lazareva &lt;<a href="mailto:tatiana.alexandrovna.lazareva@gmail.com">tatiana.alexandrovna.lazareva@gmail.com</a>&gt;<br>
Cc: <a href="mailto:info@omniorb-support.com">info@omniorb-support.com</a><br><br><br>Tatiana,<br>
<br>
Did you intend to post this to the omniORB mailing list?  This email<br>
address is for queries about commercial support for omniORB. The address<br>
for the mailing list is <a href="mailto:omniorb-list@omniorb-support.com">omniorb-list@omniorb-support.com</a>.<br>
<br>
Regardless, there is not a bug in the T_var operator=. It is behaving as<br>
required by the spec. See section 4.5.1 of the C++ mapping<br>
specification:<br>
<br>
        For example, the assignment statement in the code below will<br>
        result in the object reference held by p to be released at the<br>
        end of the block containing the declaration of a.<br>
<br>
        // C++<br>
        A_var a;<br>
        A_ptr p = // ...somehow obtain an objref...<br>
        a = p;<br>
<br>
<br>
Duncan.<br>
<br>
<br>
On Mon, 2011-10-17 at 09:55 +0400, Tatiana Lazareva wrote:<br>
&gt; Hi all,<br>
&gt;<br>
&gt; I have an error occurred in releaseObjRef function in omniInternal.cc<br>
&gt; file in string: &quot;  int rc = --objref-&gt;pd_refCount;&quot;:<br>
&gt; &quot;ERROR -- trying to release an object with reference count &lt;= 0.\n&quot;<br>
&gt;       &quot; CORBA::release() may have been called too many times on an<br>
&gt; object\n&quot;<br>
&gt;       &quot; reference.&quot;<br>
&gt;<br>
&gt;<br>
&gt; I investigate this problem and detected the following problem:<br>
&gt; When I use this operator (templatedecls.h file, for template &lt;class T,<br>
&gt; class T_Helper&gt; class _CORBA_ObjRef_Var class):<br>
&gt;   inline T_var&amp; operator= (T_ptr p) {<br>
&gt;     T_Helper::release(pd_objref);<br>
&gt;     pd_objref = p;<br>
&gt;     return *this;<br>
&gt;   }<br>
&gt; release function decrement refCount, but pd_objref is not removed, it<br>
&gt; is only redefined.<br>
&gt; So when I invoke any other function for this object (pd_objref - it is<br>
&gt; not null, this is existence object with correct data), that internally<br>
&gt; invoke releaseObjRef(), the pd_refCount for my object is 0 and I have<br>
&gt; the error above.<br>
&gt;<br>
&gt;<br>
&gt; I think that the &quot;operator =&quot; implemented with the bug and I fixed it<br>
&gt; like this:<br>
&gt;   inline T_var&amp; operator= (T_ptr p) {<br>
&gt;     T_Helper::duplicate(p);<br>
&gt;     T_Helper::release(pd_objref);<br>
&gt;     pd_objref = p;<br>
&gt;     return *this;<br>
&gt;   }<br>
&gt;<br>
&gt;<br>
&gt; duplicate function increment refCount back. After this fix my error<br>
&gt; disappears.<br>
&gt;<br>
&gt;<br>
&gt; I noted that CORBA implementation contains many similar operators that<br>
&gt; decrement refCount in release function, doesn&#39;t remove pd_objref, and<br>
&gt; doesn&#39;t return refCount to correct value.<br>
&gt;<br>
&gt;<br>
&gt; Could you please check this issue?<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt;<br>
&gt;<br>
&gt; Cheers,<br>
&gt;<br>
&gt; Tatiana Lazareva<br>
&gt;<br>
&gt; e-mail (regular): <a href="mailto:Tatiana.Alexandrovna.Lazareva@gmail.com">Tatiana.Alexandrovna.Lazareva@gmail.com</a><br>
&gt;<br>
&gt;<br>
<font color="#888888"><br>
--<br>
 -- Duncan Grisby         --<br>
  -- <a href="mailto:duncan@grisby.org">duncan@grisby.org</a>     --<br>
   -- <a href="http://www.grisby.org" target="_blank">http://www.grisby.org</a> --<br>
<br>
<br>
</font></div><br><br clear="all"><div><br></div>-- <br><p><font face="&#39;Book Antiqua&#39;, serif"></font></p><p><font face="&#39;Book Antiqua&#39;, serif"><span lang="EN-US" style="font-family:&quot;Book Antiqua&quot;,&quot;serif&quot;"><span></span>Cheers,</span></font></p>
<font face="&#39;Book Antiqua&#39;, serif">

<p><b><span lang="EN-US" style="font-family:&quot;Book Antiqua&quot;,&quot;serif&quot;;color:red">T</span></b><span lang="EN-US" style="font-family:&quot;Book Antiqua&quot;,&quot;serif&quot;">atiana <b><span style="color:red">L</span></b>azareva</span><b><span style="font-family:&quot;Book Antiqua&quot;,&quot;serif&quot;"></span></b></p>
</font><p></p><p><font face="&#39;Book Antiqua&#39;, serif" color="#333333">e-mail (regular):</font><font face="&#39;Book Antiqua&#39;, serif" color="#333333"> </font><font face="&#39;Book Antiqua&#39;, serif" color="#FF6666"><u><a href="mailto:Tatiana.Alexandrovna.Lazareva@gmail.com" target="_blank">Tatiana.Alexandrovna.Lazareva@gmail.com</a></u></font></p>
<p><font face="&#39;Book Antiqua&#39;, serif"><font color="#333333">e-mail (office): </font><u><font color="#FF6666"><a href="mailto:yumanova@mera.ru" target="_blank">yumanova@mera.ru</a></font></u></font></p><br>
</div>