<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:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
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;}
pre
        {mso-style-priority:99;
        mso-style-link:"Pr\00E9format\00E9 HTML Car";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.PrformatHTMLCar
        {mso-style-name:"Pr\00E9format\00E9 HTML Car";
        mso-style-priority:99;
        mso-style-link:"Pr\00E9format\00E9 HTML";
        font-family:"Courier New";
        mso-fareast-language:FR;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
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="FR" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="EN-CA" style="font-size:10.0pt;font-family:"Courier New";mso-fareast-language:FR">ACE VERSION: 6.2 (probably same thing for newer ACE Versions as the asnmp code has no functional change)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA" style="font-size:10.0pt;font-family:"Courier New";mso-fareast-language:FR">HOST MACHINE and OPERATING SYSTEM: PC with Windows XP<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA" style="font-family:"Arial",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="PT-BR" style="font-family:"Arial",sans-serif">Config.h : #include "ace/config-win32.h"<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="PT-BR" style="font-family:"Arial",sans-serif"><o:p> </o:p></span></p>
<pre><span lang="PT-BR">Microsoft Visual C++<o:p></o:p></span></pre>
<p class="MsoNormal"><span lang="PT-BR" style="font-family:"Arial",sans-serif"><o:p> </o:p></span></p>
<pre><span lang="EN-CA">No $ACE_ROOT/bin/MakeProjectCreator/config/default.features file<o:p></o:p></span></pre>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">ASNMP\snmp affected<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<pre><span lang="EN-CA">THE PROBLEM AFFECT: EXECUTION<o:p></o:p></span></pre>
<p class="MsoNormal"><span lang="EN-CA" style="font-family:"Arial",sans-serif"><o:p> </o:p></span></p>
<pre><span lang="EN-CA">SYNOPSIS:<o:p></o:p></span></pre>
<p class="MsoNormal"><span lang="EN-CA">asynchronous get (use of </span><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">Snmp::get( Pdu &pdu, UdpTarget &target, Snmp_Result * cb)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">will loop / burst affecting CPU and network in a specific scenario<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<pre><span lang="EN-CA">DESCRIPTION:<o:p></o:p></span></pre>
<p class="MsoNormal"><span lang="EN-CA">Usually, a simple call to </span><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">Snmp::get( Pdu &pdu, UdpTarget &target, Snmp_Result * cb) will be OK<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">But if you use it with a polling (for exemple call each 5s) and you several times disconnect/reconnect network during one minute it can go into trouble.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">In Snmp::result you will have rc == SNMP_CLASS_TIMEOUT, and in this case we must not check pdu_->get_request_id() because this pdu_ won't be updated<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">This (pdu_->get_request_id() == hold_req_id_) check will be False, so the transaction is run, again, and again.. Doing network / CPU burst<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">I have done the following workaround for this :<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New";color:blue">void</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New""> Snmp::result(transaction *t,
<span style="color:blue">int</span> rc)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">    t->result(*pdu_);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">   
<span style="color:green">// verify this is the pdu we are after, except that a result with rc SNMP_CLASS_TIMEOUT or SNMP_CLASS_RESOURCE_UNAVAIL<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">     
<span style="color:green">// are special cases build by ASNMP lib in transaction::handle_timeout/handle_input:<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">     
<span style="color:green">// in these cases we must not check pdu_->get_request_id() because this pdu_ won't be updated<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">   
<span style="color:blue">if</span> ((rc == SNMP_CLASS_TIMEOUT) || (rc == SNMP_CLASS_RESOURCE_UNAVAIL)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">            || (pdu_->get_request_id() == hold_req_id_))<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New"">   
</span><span style="font-size:10.0pt;font-family:"Courier New"">{…</span><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New""><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
</div>
</body>
</html>