fixed lots of not-thread-safe things

Most of the things I fixed here were using libc functions that are
fundamentally not thread-safe.
diff --git a/aos/common/time_test.cc b/aos/common/time_test.cc
index c073e9e..af6db05 100644
--- a/aos/common/time_test.cc
+++ b/aos/common/time_test.cc
@@ -34,19 +34,21 @@
   // longer than it should the second time, where it actually matters)
   SleepFor(Time(0, Time::kNSecInSec / 10));
   Time start = Time::Now();
-  SleepFor(Time(0, Time::kNSecInSec * 2 / 10));
-  EXPECT_TRUE(MACRO_DARG((Time::Now() - start)
-                         .IsWithin(Time(0, Time::kNSecInSec * 2 / 10),
-                                   Time::kNSecInSec / 1000)));
+  static constexpr Time kSleepTime = Time(0, Time::kNSecInSec * 2 / 10);
+  SleepFor(kSleepTime);
+  Time difference = Time::Now() - start;
+  EXPECT_GE(difference, kSleepTime);
+  EXPECT_LT(difference, kSleepTime + Time(0, Time::kNSecInSec / 100));
 }
 
 TEST(TimeTest, AbsoluteSleep) {
   Time start = Time::Now();
   SleepFor(Time(0, Time::kNSecInSec / 10));
-  SleepUntil((start + Time(0, Time::kNSecInSec * 2 / 10)));
-  EXPECT_TRUE(MACRO_DARG((Time::Now() - start)
-                         .IsWithin(Time(0, Time::kNSecInSec * 2 / 10),
-                                   Time::kNSecInSec / 1000)));
+  static constexpr Time kSleepTime = Time(0, Time::kNSecInSec * 2 / 10);
+  SleepUntil(start + kSleepTime);
+  Time difference = Time::Now() - start;
+  EXPECT_GE(difference, kSleepTime);
+  EXPECT_LT(difference, kSleepTime + Time(0, Time::kNSecInSec / 100));
 }
 
 TEST(TimeTest, Addition) {