]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
time: Fix encode/decode for real_time values 7328/head
authorAdam C. Emerson <aemerson@redhat.com>
Fri, 22 Jan 2016 02:10:46 +0000 (21:10 -0500)
committerCasey Bodley <cbodley@redhat.com>
Tue, 26 Jan 2016 19:22:09 +0000 (14:22 -0500)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/common/ceph_time.h

index a634e7fec554bf7248356c807161d685a0671015..a5ae0fec5ab8bf2f5b163dac4bb18930e76a7e94 100644 (file)
@@ -345,18 +345,21 @@ namespace ceph {
 template<typename Clock, typename Duration>
 void encode(const std::chrono::time_point<Clock, Duration>& t,
            ceph::bufferlist &bl) {
-  struct timespec ts = Clock::to_timespec();
+  auto ts = Clock::to_timespec(t);
   // A 32 bit count of seconds causes me vast unhappiness.
-  ::encode((uint32_t) ts.tv_sec, bl);
-  ::encode((uint32_t) ts.tv_nsec, bl);
+  uint32_t s = ts.tv_sec;
+  uint32_t ns = ts.tv_nsec;
+  ::encode(s, bl);
+  ::encode(ns, bl);
 }
 
 template<typename Clock, typename Duration>
 void decode(std::chrono::time_point<Clock, Duration>& t,
            bufferlist::iterator& p) {
-  struct timespec ts;
-  ::decode((uint32_t&) ts.tv_sec, p);
-  ::decode((uint32_t&) ts.tv_nsec, p);
+  uint32_t s, ns;
+  ::decode(s, p);
+  ::decode(ns, p);
+  struct timespec ts = {s, ns};
 
   t = Clock::from_timespec(ts);
 }