<p>Pau Espin Pedrol has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12280">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Timeval: Move implementation to use clock_gettime and timespec<br><br>According to gettimeofday manual:<br>"Applications should use the clock_gettime() function instead of the<br>obsolescent gettimeofday() function."<br><br>Furthermore, it may be desirable in the future to use other clocks such<br>as monotonic.<br><br>Change-Id: I2286998c5eefbf3c3dfb105c223daec7a1083803<br>---<br>M CommonLibs/Timeval.cpp<br>M CommonLibs/Timeval.h<br>2 files changed, 28 insertions(+), 28 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/80/12280/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/CommonLibs/Timeval.cpp b/CommonLibs/Timeval.cpp</span><br><span>index 991e241..21072fc 100644</span><br><span>--- a/CommonLibs/Timeval.cpp</span><br><span>+++ b/CommonLibs/Timeval.cpp</span><br><span>@@ -34,36 +34,33 @@</span><br><span>    now();</span><br><span>       unsigned sec = offset/1000;</span><br><span>  unsigned msec = offset%1000;</span><br><span style="color: hsl(0, 100%, 40%);">-    mTimeval.tv_usec += msec*1000;</span><br><span style="color: hsl(0, 100%, 40%);">-  mTimeval.tv_sec += sec;</span><br><span style="color: hsl(0, 100%, 40%);">- if (mTimeval.tv_usec>1000000) {</span><br><span style="color: hsl(0, 100%, 40%);">-              mTimeval.tv_usec -= 1000000;</span><br><span style="color: hsl(0, 100%, 40%);">-            mTimeval.tv_sec += 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ mTimespec.tv_nsec += msec*1000*1000;</span><br><span style="color: hsl(120, 100%, 40%);">+  mTimespec.tv_sec += sec;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mTimespec.tv_nsec > 1000*1000*1000) {</span><br><span style="color: hsl(120, 100%, 40%);">+          mTimespec.tv_nsec -= 1000*1000*1000;</span><br><span style="color: hsl(120, 100%, 40%);">+          mTimespec.tv_sec += 1;</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span> </span><br><span> struct timespec Timeval::timespec() const</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        struct timespec retVal;</span><br><span style="color: hsl(0, 100%, 40%);">- retVal.tv_sec = mTimeval.tv_sec;</span><br><span style="color: hsl(0, 100%, 40%);">-        retVal.tv_nsec = 1000 * (long)mTimeval.tv_usec;</span><br><span style="color: hsl(0, 100%, 40%);">- return retVal;</span><br><span style="color: hsl(120, 100%, 40%);">+        return mTimespec;</span><br><span> }</span><br><span> </span><br><span> </span><br><span> bool Timeval::passed() const</span><br><span> {</span><br><span>  Timeval nowTime;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (nowTime.mTimeval.tv_sec < mTimeval.tv_sec) return false;</span><br><span style="color: hsl(0, 100%, 40%);">- if (nowTime.mTimeval.tv_sec > mTimeval.tv_sec) return true;</span><br><span style="color: hsl(0, 100%, 40%);">-  if (nowTime.mTimeval.tv_usec >= mTimeval.tv_usec) return true;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (nowTime.mTimespec.tv_sec < mTimespec.tv_sec) return false;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (nowTime.mTimespec.tv_sec > mTimespec.tv_sec) return true;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (nowTime.mTimespec.tv_nsec >= mTimespec.tv_nsec) return true;</span><br><span>  return false;</span><br><span> }</span><br><span> </span><br><span> double Timeval::seconds() const</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  return ((double)mTimeval.tv_sec) + 1e-6*((double)mTimeval.tv_usec);</span><br><span style="color: hsl(120, 100%, 40%);">+   return ((double)mTimespec.tv_sec) + 1e-9*((double)mTimespec.tv_nsec);</span><br><span> }</span><br><span> </span><br><span> </span><br><span>@@ -72,8 +69,8 @@</span><br><span> {</span><br><span>  // 2^31 milliseconds is just over 4 years.</span><br><span>   int32_t deltaS = other.sec() - sec();</span><br><span style="color: hsl(0, 100%, 40%);">-   int32_t deltaUs = other.usec() - usec();</span><br><span style="color: hsl(0, 100%, 40%);">-        return 1000*deltaS + deltaUs/1000;</span><br><span style="color: hsl(120, 100%, 40%);">+    int32_t deltaNs = other.nsec() - nsec();</span><br><span style="color: hsl(120, 100%, 40%);">+      return 1000*deltaS + deltaNs/1000000;</span><br><span> }</span><br><span>   </span><br><span> </span><br><span>@@ -89,7 +86,7 @@</span><br><span> </span><br><span> ostream& operator<<(ostream& os, const struct timespec& ts)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      os << ts.tv_sec << "," << ts.tv_nsec;</span><br><span style="color: hsl(120, 100%, 40%);">+     os << ts.tv_sec << "," << ts.tv_nsec/1000;</span><br><span>       return os;</span><br><span> }</span><br><span> </span><br><span>diff --git a/CommonLibs/Timeval.h b/CommonLibs/Timeval.h</span><br><span>index c497864..b780af1 100644</span><br><span>--- a/CommonLibs/Timeval.h</span><br><span>+++ b/CommonLibs/Timeval.h</span><br><span>@@ -42,12 +42,12 @@</span><br><span> </span><br><span>   private:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    struct timeval mTimeval;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct timespec mTimespec;</span><br><span> </span><br><span>       public:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /** Set the value to gettimeofday. */</span><br><span style="color: hsl(0, 100%, 40%);">-   void now() { gettimeofday(&mTimeval,NULL); }</span><br><span style="color: hsl(120, 100%, 40%);">+      /** Set the value to current time. */</span><br><span style="color: hsl(120, 100%, 40%);">+ void now() { clock_gettime(CLOCK_REALTIME, &mTimespec); }</span><br><span> </span><br><span>    /** Set the value to gettimeofday plus an offset. */</span><br><span>         void future(unsigned ms);</span><br><span>@@ -55,16 +55,18 @@</span><br><span>      //@{</span><br><span>         Timeval(unsigned sec, unsigned usec)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-               mTimeval.tv_sec = sec;</span><br><span style="color: hsl(0, 100%, 40%);">-          mTimeval.tv_usec = usec;</span><br><span style="color: hsl(120, 100%, 40%);">+              mTimespec.tv_sec = sec;</span><br><span style="color: hsl(120, 100%, 40%);">+               mTimespec.tv_nsec = usec*1000;</span><br><span>       }</span><br><span> </span><br><span>        Timeval(const struct timeval& wTimeval)</span><br><span style="color: hsl(0, 100%, 40%);">-             :mTimeval(wTimeval)</span><br><span style="color: hsl(0, 100%, 40%);">-     {}</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             mTimespec.tv_sec = wTimeval.tv_sec;</span><br><span style="color: hsl(120, 100%, 40%);">+           mTimespec.tv_nsec = wTimeval.tv_sec*1000;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        /**</span><br><span style="color: hsl(0, 100%, 40%);">-             Create a Timeval offset into the future.</span><br><span style="color: hsl(120, 100%, 40%);">+              Create a Timespec offset into the future.</span><br><span>            @param offset milliseconds</span><br><span>   */</span><br><span>   Timeval(unsigned offset=0) { future(offset); }</span><br><span>@@ -76,8 +78,9 @@</span><br><span>   /** Return total seconds. */</span><br><span>         double seconds() const;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     uint32_t sec() const { return mTimeval.tv_sec; }</span><br><span style="color: hsl(0, 100%, 40%);">-        uint32_t usec() const { return mTimeval.tv_usec; }</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t sec() const { return mTimespec.tv_sec; }</span><br><span style="color: hsl(120, 100%, 40%);">+     uint32_t usec() const { return mTimespec.tv_nsec / 1000; }</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t nsec() const { return mTimespec.tv_nsec; }</span><br><span> </span><br><span>      /** Return differnce from other (other-self), in ms. */</span><br><span>      long delta(const Timeval& other) const;</span><br><span>@@ -88,11 +91,11 @@</span><br><span>    /** Remaining time in ms. */</span><br><span>         long remaining() const { return -elapsed(); }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       /** Return true if the time has passed, as per gettimeofday. */</span><br><span style="color: hsl(120, 100%, 40%);">+       /** Return true if the time has passed, as per clock_gettime(CLOCK_REALTIME). */</span><br><span>     bool passed() const;</span><br><span> </span><br><span>     /** Add a given number of minutes to the time. */</span><br><span style="color: hsl(0, 100%, 40%);">-       void addMinutes(unsigned minutes) { mTimeval.tv_sec += minutes*60; }</span><br><span style="color: hsl(120, 100%, 40%);">+  void addMinutes(unsigned minutes) { mTimespec.tv_sec += minutes*60; }</span><br><span> </span><br><span> };</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12280">change 12280</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12280"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I2286998c5eefbf3c3dfb105c223daec7a1083803 </div>
<div style="display:none"> Gerrit-Change-Number: 12280 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>