On Mon, 2012-12-10 at 00:12 +0000, Rob Day wrote:
> The attached patch fixes that behaviour by avoiding a situation where we
> divide by zero.
The actual patch I'll be committing is below. This fixes a similar bug
where if you attempted to make more than 1 call per ms and
getmilliseconds() returned 0 (as seemed to happen on Fedora 12 and
Centos 5, but which will likely happen 0.1% of the time anywhere) the
return code would evaluate to something like (0+1 / 1.1), and casting
that to a long would truncate it to 0, meaning no calls would be set up.
Best,
Rob
--- a/opentask.cpp
+++ b/opentask.cpp
@@ -31,6 +31,7 @@
* Charles P Wright from IBM Research
*/
#include "sipp.hpp"
+#define MAX(a,b) (((a)>(b))?(a):(b))
class opentask *opentask::instance = NULL;
unsigned long opentask::calls_since_last_rate_change = 0;
@@ -61,7 +62,7 @@ unsigned int opentask::wake() {
return 0;
} else {
/* We need to compute when the next call is going to be opened. */
- return (unsigned long) (last_rate_change_time +
((calls_since_last_rate_change + 1) / (rate/rate_period_ms)));
+ return (unsigned long) MAX((last_rate_change_time +
calls_since_last_rate_change) / (MAX(rate,1)/MAX(rate_period_ms,1)));
}
}
------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Sipp-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sipp-users