<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>