<html><head><base href="x-msg://819/"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><div><span class="Apple-style-span" style="font-size: medium;"><font class="Apple-style-span" color="#0000FF" face="'Gill Sans'">Given that I based pthreads on win32 its no surprise that I replicated the bug.</font></span></div></span></span></span></span></span></span></span></span></div></span></span>
</div><div>I've fixed it in ThreadPThread on the trunk.  Probably needs copying over to the release branch.</div>
<br><div><div>On 13 Dec 2009, at 00:38, Jay K wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div class="hmmessage" style="font-size: 10pt; font-family: Verdana; ">The 4.1 code has the bug (this is probably identical but I haven't done a mechanical diff,<br>but it is plain to see it has the bug):<br>(I bought 4.1 too).<br> <br><br>PROCEDURE AlertPause(n: LONGREAL) RAISES {Alerted} =<br>  VAR amount, thisTime: LONGREAL;<br>  CONST Limit = FLOAT(LAST(CARDINAL), LONGREAL) / 1000.0D0 - 1.0D0;<br>  VAR self: T;<br>  BEGIN<br>    self := Self();<br>    amount := n;<br>    WHILE amount > 0.0D0 DO<br>      thisTime := MIN (Limit, amount);<br>      amount := amount - thisTime;<br>      WinBase.EnterCriticalSection(cm);<br>      InnerTestAlert(self);<br>      self.alertable := TRUE;<br>      <* ASSERT(self.waitingOn = NIL) *><br>      WinBase.LeaveCriticalSection(cm);<br>      EVAL WinBase.WaitForSingleObject(self.waitSema, ROUND(thisTime*1000.0D0));<br>      WinBase.EnterCriticalSection(cm);<br>      self.alertable := FALSE;<br>      IF self.alerted THEN<br>        (* Sadly, the alert might have happened after we timed out on the<br>           semaphore and before we entered "cm". In that case, we need to<br>           decrement the semaphore's count *)<br>        EVAL WinBase.WaitForSingleObject(self.waitSema, 0);<br>        InnerTestAlert(self);<br>      END;<br>      WinBase.LeaveCriticalSection(cm);<br>    END;<br>  END AlertPause;<br><br> - Jay<br><br><br> <br><hr id="stopSpelling">Date: Sun, 13 Dec 2009 00:16:31 -0500<br>From:<span class="Apple-converted-space"> </span><a href="mailto:rcoleburn@scires.com">rcoleburn@scires.com</a><br>To:<span class="Apple-converted-space"> </span><a href="mailto:m3devel@elegosoft.com">m3devel@elegosoft.com</a><br>Subject: Re: [M3devel] AlertPause(0) is alertable?<br><br><div>Jay:  I never messed around much with the 3.6 code.  I purchased the 4.1 commercial version.  Prior to that we did use the DEC SRC version and that would have been the extent of my 3.6 familiarity.  After the commercial release came out, we went exclusively with Critical Mass 4.1.</div><div>Regards,</div><div>Randy<br><br>>>> Jay K <<a href="mailto:jay.krell@cornell.edu">jay.krell@cornell.edu</a>> 12/12/2009 11:56 PM >>><br>Randy, Thanks. I fixed Win32 to be like that. pthreads still looks wrong.<br> <br> <br>Note that the 3.6 code doesn't seem to get it right:<br> <br> <br>PROCEDURE AlertPause(n: LONGREAL) RAISES {Alerted} =<br>  VAR amount, thisTime: LONGREAL;<br>  CONST Limit = FLOAT(LAST(CARDINAL), LONGREAL) / 1000.0D0 - 1.0D0;<br>  VAR self: T;<br>  BEGIN<br>    self := Self();<br>    amount := n;<br>    WHILE amount > 0.0D0 DO<br>      thisTime := MIN (Limit, amount);<br>      amount := amount - thisTime;<br>      WinBase.EnterCriticalSection(cm);<br>      InnerTestAlert(self);<br>      self.alertable := TRUE;<br>      <* ASSERT(self.waitingOn = NIL) *><br>      WinBase.LeaveCriticalSection(cm);<br>      EVAL WinBase.WaitForSingleObject(self.waitSema, ROUND(thisTime*1.0D3));<br>      WinBase.EnterCriticalSection(cm);<br>      self.alertable := FALSE;<br>      IF self.alerted THEN<br>        (* Sadly, the alert might have happened after we timed out on the<br>           semaphore and before we entered "cm". In that case, we need to<br>           decrement the semaphore's count *)<br>        EVAL WinBase.WaitForSingleObject(self.waitSema, 0);<br>        InnerTestAlert(self);<br>      END;<br>      WinBase.LeaveCriticalSection(cm);<br>    END;<br>  END AlertPause;<br><br>The 3.6 and current user threads code seems ok, but I've not very familiar with it.<br> <br>This might be one of those things though that's been consistently broken for so long that it's best not to depend on?<br>Prefer AlertPause(0.01) over AlertPause(0)??<br> <br> <br> - Jay<br><br><br> <br></div><div><hr id="ecxstopSpelling"></div><div>Date: Sat, 12 Dec 2009 23:56:08 -0500<br>From:<span class="Apple-converted-space"> </span><a href="mailto:rcoleburn@scires.com">rcoleburn@scires.com</a><br>To:<span class="Apple-converted-space"> </span><a href="mailto:m3devel@elegosoft.com">m3devel@elegosoft.com</a><br>Subject: Re: [M3devel] AlertPause(0) is alertable?<br><br></div><div>My understanding of the interface has always been as you suggest, namely, yes you should get an "Alerted" exception if the thread is marked alerted regardless of the value of the n (seconds) parameter.</div><div> </div><div>Regards,</div><div>Randy<br><br>>>> Jay K <<a href="mailto:jay.krell@cornell.edu">jay.krell@cornell.edu</a>> 12/12/2009 7:37 PM >>><br>If I call AlertPause with <= 0 time, should I recieve alerts?<br>Current pthread/win32 implementations: no.<br> They say if time <= then return end before doing much.<br>My suspicion: yes.<br><br><br>Thread.i3:<br> <br>PROCEDURE AlertPause(n: LONGREAL) RAISES {Alerted};<br>(* Like "Pause", but if the thread is marked alerted at the time of<br>   the call or sometime during the wait, raise "Alerted". *)<br><br> <br> - Jay<br></div></div></span></blockquote></div><br></body></html>