<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 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@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";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.E-MailFormatvorlage17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:761491803;
        mso-list-type:hybrid;
        mso-list-template-ids:403742614 256415706 67567619 67567621 67567617 67567619 67567621 67567617 67567619 67567621;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US>Hi everyone,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>we hit a problem concerning EventWaitHandle.WaitOne(timeout) in conjunction with<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>changing system time during long timeouts. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>The problem only exists using named events. After a short analysis I think I found the main problem:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoListParagraph><span lang=EN-US>In the io-layer  the WaitForSingleObjectEx method uses <i>_wapi_calc_timeout</i> (from misc.c) to compute<o:p></o:p></span></p><p class=MsoListParagraph><span lang=EN-US>an absolute time from the given timeout, but the absolute timeout is computed using “<i>gettimeofday</i>”.<o:p></o:p></span></p><p class=MsoListParagraph><span lang=EN-US>That will cause problems if the system clock changes during checking (named events spin through fake timeouts <o:p></o:p></span></p><p class=MsoListParagraph><span lang=EN-US>until the absolute timeout seems to be reached).<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                Unnamed events also use the <i>_wapi_calc_timeout</i> method to compute the absolute timeout. This timeout is <o:p></o:p></span></p><p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US>then used in <i>mono_cond_timedwait</i> (but this only wraps “normal” pthread conditions).  <o:p></o:p></span></p><p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US>So I prepared a patch (see attached files) using <i>clock_gettime(CLOCK_MONOTONIC,..)</i> instead of gettimeofday, but this also requires<o:p></o:p></span></p><p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US>a change for unnamed events, because the pthreads condition needs to know what kind of clock provides the <o:p></o:p></span></p><p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US>absolute timeout. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>This seems to fix the issue for us.  Is this an appropriate way to fix this? What do you think. <o:p></o:p></span></p><p class=MsoNormal><i><span lang=EN-US>_wapi_calc_timeout </span></i><span lang=EN-US>is also used in some other timeout relevant functions, but I just found<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>the “faketimeout” way of checking the absolute timeout and the <i>mono_cond_timed_wait.<o:p></o:p></i></span></p><p class=MsoNormal><span lang=EN-US>Or do I miss some occurrences/cases checking the absolute timeout.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Thanks for looking at this. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>CU Mirko<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                 <o:p></o:p></span></p><p class=MsoListParagraph><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><font face="monospace">___________________________________________________<br>
<br>
SMA Solar Technology AG<br>
Aufsichtsrat: Guenther Cramer (Vorsitzender)<br>
Vorstand: Juergen Dolle, Roland Grebe, Pierre-Pascal Urbon, Marko Werner<br>
Handelsregister: Amtsgericht Kassel HRB 3972<br>
Sitz der Gesellschaft: 34266 Niestetal<br>
USt-ID-Nr. DE 113 08 59 54<br>
WEEE-Reg.-Nr. DE 95881150<br>
___________________________________________________</font></body></html>