+
+ void safe_read (SafeTime& dst) const {
+ int tries = 0;
+
+ do {
+ if (tries == 10) {
+ std::cerr << X_("SafeTime: atomic read of current time failed, sleeping!") << std::endl;
+ Glib::usleep (20);
+ tries = 0;
+ }
+ dst.guard1.store (guard1.load (boost::memory_order_seq_cst), boost::memory_order_seq_cst);
+ dst.position = position;
+ dst.timestamp = timestamp;
+ dst.speed = speed;
+ dst.guard2.store (guard2.load (boost::memory_order_seq_cst), boost::memory_order_seq_cst);
+ tries++;
+
+ } while (dst.guard1.load (boost::memory_order_seq_cst) != dst.guard2.load (boost::memory_order_seq_cst));
+ }