summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/timersub_bug7
-rw-r--r--src/common/compat.h4
2 files changed, 9 insertions, 2 deletions
diff --git a/changes/timersub_bug b/changes/timersub_bug
new file mode 100644
index 0000000000..9183862677
--- /dev/null
+++ b/changes/timersub_bug
@@ -0,0 +1,7 @@
+ o Major bugfixes:
+ - Provide correct replacements for the timeradd() and timersub() functions
+ for platforms that lack them (for example, windows). The timersub()
+ function is used when expiring circuits, timeradd() is currently unused.
+ Patch written by Vektor, who also reported the bug. Thanks! Bugfix
+ on 0.2.2.24-alpha/0.2.3.1-alpha, fixes bug 4778.
+
diff --git a/src/common/compat.h b/src/common/compat.h
index 1394717882..2db8107a8e 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -335,7 +335,7 @@ struct tm *tor_gmtime_r(const time_t *timep, struct tm *result);
#define timeradd(tv1,tv2,tvout) \
do { \
(tvout)->tv_sec = (tv1)->tv_sec + (tv2)->tv_sec; \
- (tvout)->tv_usec = (tv2)->tv_usec + (tv2)->tv_usec; \
+ (tvout)->tv_usec = (tv1)->tv_usec + (tv2)->tv_usec; \
if ((tvout)->tv_usec >= 1000000) { \
(tvout)->tv_usec -= 1000000; \
(tvout)->tv_sec++; \
@@ -349,7 +349,7 @@ struct tm *tor_gmtime_r(const time_t *timep, struct tm *result);
#define timersub(tv1,tv2,tvout) \
do { \
(tvout)->tv_sec = (tv1)->tv_sec - (tv2)->tv_sec; \
- (tvout)->tv_usec = (tv2)->tv_usec - (tv2)->tv_usec; \
+ (tvout)->tv_usec = (tv1)->tv_usec - (tv2)->tv_usec; \
if ((tvout)->tv_usec < 0) { \
(tvout)->tv_usec += 1000000; \
(tvout)->tv_sec--; \