Repository: qpid-proton
Updated Branches:
  refs/heads/master 3fba028e9 -> 6745a5059


PROTON-1981: [cpp] timestamp::now returns wrong value.

Was returning pn_proactor_now() which is monotonic time, fixed to return
wall-clock time.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/6745a505
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/6745a505
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/6745a505

Branch: refs/heads/master
Commit: 6745a5059264d32f27953a448da60eed8dcd740c
Parents: 3fba028
Author: Alan Conway <acon...@redhat.com>
Authored: Tue Dec 11 20:28:24 2018 -0500
Committer: Alan Conway <acon...@redhat.com>
Committed: Tue Dec 11 20:28:24 2018 -0500

----------------------------------------------------------------------
 cpp/src/timestamp.cpp | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6745a505/cpp/src/timestamp.cpp
----------------------------------------------------------------------
diff --git a/cpp/src/timestamp.cpp b/cpp/src/timestamp.cpp
index 437276e..0e1cc96 100644
--- a/cpp/src/timestamp.cpp
+++ b/cpp/src/timestamp.cpp
@@ -20,17 +20,45 @@
 #include "proton/timestamp.hpp"
 
 #include "proton/internal/config.hpp"
+#include <proton/error.hpp>
 #include <proton/proactor.h>
 #include <proton/types.h>
 
 #include <iostream>
 
+// Can't use std::chrono since we still support C++03, sigh.
+
+#ifdef WIN32
+#include <windows.h>
+
+#else
+#include <sys/time.h>
+#endif
+
 namespace proton {
 
+#ifdef WIN32
+
 timestamp timestamp::now() {
-    return timestamp( pn_proactor_now() );
+  FILETIME now;
+  GetSystemTimeAsFileTime(&now);
+  ULARGE_INTEGER t;
+  t.u.HighPart = now.dwHighDateTime;
+  t.u.LowPart = now.dwLowDateTime;
+  // Convert to milliseconds and adjust base epoch
+  return timestamp(t.QuadPart / 10000 - 11644473600000);
 }
 
+#else
+
+timestamp timestamp::now() {
+  struct timeval now;
+  if (::gettimeofday(&now, NULL)) throw proton::error("gettimeofday failed");
+  return timestamp(int64_t(now.tv_sec) * 1000 + (now.tv_usec / 1000));
+}
+
+#endif
+
 std::ostream& operator<<(std::ostream& o, timestamp ts) { return o << 
ts.milliseconds(); }
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to