<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">So after sending this original e-mail, I found some of the auto-generated code for the get_connection_* calls and it is calling _duplicate on the return value which then means the caller would need to place it
 into a _var type or call release explicitly.  I don’t have to source handy for the calls that reactor() is making, but I’m guessing they are also doing the same thing.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">So is this the general pattern followed in the CIAO layer to always call _duplicate on any returned object references?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Perry King<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> King, Perry (ES) <br>
<b>Sent:</b> Thursday, November 03, 2016 2:48 PM<br>
<b>To:</b> 'ciao-users@list.isis.vanderbilt.edu' <ciao-users@list.isis.vanderbilt.edu><br>
<b>Subject:</b> [CIAO] [questions on lack of _duplicate in a component's auto-generated reactor() method, etc...]<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    CIAO VERSION: 1.3.2<o:p></o:p></p>
<p class="MsoNormal">    TAO VERSION : 2.3.2<o:p></o:p></p>
<p class="MsoNormal">    ACE VERSION : 6.3.2<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    HOST MACHINE and OPERATING SYSTEM:<o:p></o:p></p>
<p class="MsoNormal">        Intel core I7 4-core Ivy bridge based PC, Centos 6.5<o:p></o:p></p>
<p class="MsoNormal">        If on Windows based OS's, which version of WINSOCK do you<o:p></o:p></p>
<p class="MsoNormal">        use?: N/A<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    TARGET MACHINE and OPERATING SYSTEM, if different from HOST:<o:p></o:p></p>
<p class="MsoNormal">    COMPILER NAME AND VERSION (AND PATCHLEVEL): Same<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    THE $ACE_ROOT/ace/config.h FILE [if you use a link to a platform-<o:p></o:p></p>
<p class="MsoNormal">    specific file, simply state which one]:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#ifndef SNA_ACE_CONFIG_H<o:p></o:p></p>
<p class="MsoNormal">#define SNA_ACE_CONFIG_H<o:p></o:p></p>
<p class="MsoNormal">// Turn off default DNS lookup<o:p></o:p></p>
<p class="MsoNormal">#define TAO_USE_DOTTED_DECIMAL_ADDRESSES 1<o:p></o:p></p>
<p class="MsoNormal">// Turn on in-memory growable notification queue<o:p></o:p></p>
<p class="MsoNormal">#define ACE_HAS_REACTOR_NOTIFICATION_QUEUE 1<o:p></o:p></p>
<p class="MsoNormal">// Turn on "best" collocation strategy as default<o:p></o:p></p>
<p class="MsoNormal">#define TAO_DEFAULT_COLLOCATION_STRATEGY TAO_COLLOCATION_BEST<o:p></o:p></p>
<p class="MsoNormal">// Preestablish all CORBA connections during startup<o:p></o:p></p>
<p class="MsoNormal">// TODO: Pre-establishment of connections is broken<o:p></o:p></p>
<p class="MsoNormal">//#define CIAO_PRE_ESTABLISH_CONNECTIONS 1<o:p></o:p></p>
<p class="MsoNormal">// Turn on immediate symbol resolution<o:p></o:p></p>
<p class="MsoNormal">#define ACE_DEFAULT_SHLIB_MODE RTLD_NOW | RTLD_GLOBAL<o:p></o:p></p>
<p class="MsoNormal">// Use monotonic clock<o:p></o:p></p>
<p class="MsoNormal">#define ACE_HAS_CLOCK_GETTIME_MONOTONIC 1<o:p></o:p></p>
<p class="MsoNormal">// Turn on high-resolution/monotonic clock in TAO, CIAO, and DAnCE by default<o:p></o:p></p>
<p class="MsoNormal">#define TAO_USE_HR_TIME_POLICY_STRATEGY 1<o:p></o:p></p>
<p class="MsoNormal">#include "ace/config-linux.h"<o:p></o:p></p>
<p class="MsoNormal">#endif<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you<o:p></o:p></p>
<p class="MsoNormal">    use a link to a platform-specific file, simply state which one<o:p></o:p></p>
<p class="MsoNormal">    (unless this isn't used in this case, e.g., with Microsoft Visual<o:p></o:p></p>
<p class="MsoNormal">    C++)]:<o:p></o:p></p>
<p class="MsoNormal">Not sure which one is used, but shouldn't matter for my question<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features<o:p></o:p></p>
<p class="MsoNormal">    (used by MPC when you generate your own makefiles):<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">ace_idl_dependencies            = 1<o:p></o:p></p>
<p class="MsoNormal">boost                           = 0<o:p></o:p></p>
<p class="MsoNormal">ccm_direct_collocation          = 1<o:p></o:p></p>
<p class="MsoNormal">ccm_lw                          = 1<o:p></o:p></p>
<p class="MsoNormal">ccm_noevent                     = 1<o:p></o:p></p>
<p class="MsoNormal">dds4ccm_ndds                    = 1<o:p></o:p></p>
<p class="MsoNormal">gen_ostream                     = 0<o:p></o:p></p>
<p class="MsoNormal">install_rpath                   = 0<o:p></o:p></p>
<p class="MsoNormal">ndds                            = 1<o:p></o:p></p>
<p class="MsoNormal">optimize_collocated_invocations = 1<o:p></o:p></p>
<p class="MsoNormal">stl                             = 1<o:p></o:p></p>
<p class="MsoNormal">xerces2                         = 1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    AREA/CLASS/EXAMPLE AFFECTED:<o:p></o:p></p>
<p class="MsoNormal">N/A<o:p></o:p></p>
<p class="MsoNormal">    DOES THE PROBLEM AFFECT:<o:p></o:p></p>
<p class="MsoNormal">        COMPILATION?<o:p></o:p></p>
<p class="MsoNormal">N/A<o:p></o:p></p>
<p class="MsoNormal">        LINKING?<o:p></o:p></p>
<p class="MsoNormal">N/A<o:p></o:p></p>
<p class="MsoNormal">        EXECUTION?<o:p></o:p></p>
<p class="MsoNormal">N/A<o:p></o:p></p>
<p class="MsoNormal">        OTHER (please specify)?<o:p></o:p></p>
<p class="MsoNormal">N/A<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    SYNOPSIS:<o:p></o:p></p>
<p class="MsoNormal">Usage of CORBA::ORB_var orb in a component's auto-generated reactor() method)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    DESCRIPTION:<o:p></o:p></p>
<p class="MsoNormal">The following code is auto-generated for a component's reactor() method:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">      ACE_Reactor * reactor = 0;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">     CORBA::Object_var ccm_object = this->ciao_context_->get_CCM_object();<o:p></o:p></p>
<p class="MsoNormal">      if ( ! CORBA::is_nil(ccm_object.in()))<o:p></o:p></p>
<p class="MsoNormal">      {<o:p></o:p></p>
<p class="MsoNormal">         CORBA::ORB_var orb = ccm_object->_get_orb ();<o:p></o:p></p>
<p class="MsoNormal">         if ( ! CORBA::is_nil(orb.in()))<o:p></o:p></p>
<p class="MsoNormal">         {<o:p></o:p></p>
<p class="MsoNormal">            reactor = orb->orb_core ()->reactor ();<o:p></o:p></p>
<p class="MsoNormal">         }<o:p></o:p></p>
<p class="MsoNormal">      }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">      ...<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Questions:<o:p></o:p></p>
<p class="MsoNormal">1. Since when it goes out of scope, CORBA::Object_var decrements the reference<o:p></o:p></p>
<p class="MsoNormal">   count and releases the resource when it counts down to zero, why doesn't there<o:p></o:p></p>
<p class="MsoNormal">   need to be a call to a _duplicate method on what is returned from the<o:p></o:p></p>
<p class="MsoNormal">   get_CCM_object() and reactor() calls?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">2. For a component’s port that is typed to a DDS4CCM connector If you are using an<o:p></o:p></p>
<p class="MsoNormal">    "_var" variable to hold the result from a get_connection_<port>_<basic port>() call,<o:p></o:p></p>
<p class="MsoNormal">    is it correct to use _duplicate to ensure the object held in the ciao_context_ is<o:p></o:p></p>
<p class="MsoNormal">    not prematurely freed?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">3. Is it also required that _<i>duplicate be used on similar get_connection</i>_... calls for a CORBA client port?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    REPEAT BY:<o:p></o:p></p>
<p class="MsoNormal">N/A<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    SAMPLE FIX/WORKAROUND:<o:p></o:p></p>
<p class="MsoNormal">N/A<o:p></o:p></p>
</div>
</body>
</html>