@@ -60,8 +60,8 @@ void TaskQueue::_doWake_UNLOCKED(size_t &numToWake) {
6060}
6161
6262bool TaskQueue::_doSleep (ExecutorThread &t) {
63- gettimeofday (& t.now , NULL );
64- if (less_tv ( t.now , t.waketime ) && manager->trySleep (queueType)) {
63+ t.now = gethrtime ( );
64+ if (t.now < t.waketime && manager->trySleep (queueType)) {
6565 // Atomically switch from running to sleeping; iff we were previously
6666 // running.
6767 executor_state_t expected_state = EXECUTOR_RUNNING;
@@ -71,12 +71,12 @@ bool TaskQueue::_doSleep(ExecutorThread &t) {
7171 }
7272 sleepers++;
7373 // zzz....
74- struct timeval waketime = t.now ;
75- advance_tv (waketime, MIN_SLEEP_TIME); // avoid sleeping more than this
76- if (less_tv (waketime, t. waketime )) { // to prevent losing posts
77- mutex.wait (waketime );
74+ hrtime_t snooze_nsecs = t. waketime - t.now ;
75+
76+ if (snooze_nsecs > MIN_SLEEP_TIME * 1000000000 ) {
77+ mutex.wait (MIN_SLEEP_TIME );
7878 } else {
79- mutex.wait (t. waketime );
79+ mutex.wait (snooze_nsecs );
8080 }
8181 // ... woke!
8282 sleepers--;
@@ -89,9 +89,9 @@ bool TaskQueue::_doSleep(ExecutorThread &t) {
8989 EXECUTOR_RUNNING)) {
9090 return false ;
9191 }
92- gettimeofday (& t.now , NULL );
92+ t.now = gethrtime ( );
9393 }
94- set_max_tv ( t.waketime );
94+ t.waketime = hrtime_t (- 1 );
9595 return true ;
9696}
9797
@@ -106,7 +106,7 @@ bool TaskQueue::_fetchNextTask(ExecutorThread &t, bool toSleep) {
106106 size_t numToWake = _moveReadyTasks (t.now );
107107
108108 if (!futureQueue.empty () && t.startIndex == queueType &&
109- less_tv ( futureQueue.top ()->waketime , t.waketime ) ) {
109+ futureQueue.top ()->waketime < t.waketime ) {
110110 t.waketime = futureQueue.top ()->waketime ; // record earliest waketime
111111 }
112112
@@ -148,15 +148,15 @@ bool TaskQueue::fetchNextTask(ExecutorThread &thread, bool toSleep) {
148148 return rv;
149149}
150150
151- size_t TaskQueue::_moveReadyTasks (struct timeval tv) {
151+ size_t TaskQueue::_moveReadyTasks (hrtime_t tv) {
152152 if (!readyQueue.empty ()) {
153153 return 0 ;
154154 }
155155
156156 size_t numReady = 0 ;
157157 while (!futureQueue.empty ()) {
158158 ExTask tid = futureQueue.top ();
159- if (less_eq_tv ( tid->waketime , tv) ) {
159+ if (tid->waketime <= tv ) {
160160 futureQueue.pop ();
161161 readyQueue.push (tid);
162162 numReady++;
@@ -180,25 +180,25 @@ void TaskQueue::_checkPendingQueue(void) {
180180 }
181181}
182182
183- struct timeval TaskQueue::_reschedule (ExTask &task, task_type_t &curTaskType) {
184- struct timeval waktime ;
183+ hrtime_t TaskQueue::_reschedule (ExTask &task, task_type_t &curTaskType) {
184+ hrtime_t wakeTime ;
185185 manager->doneWork (curTaskType);
186186
187187 LockHolder lh (mutex);
188188
189189 futureQueue.push (task);
190190 if (curTaskType == queueType) {
191- waktime = futureQueue.top ()->waketime ;
191+ wakeTime = futureQueue.top ()->waketime ;
192192 } else {
193- set_max_tv (waktime );
193+ wakeTime = hrtime_t (- 1 );
194194 }
195195
196- return waktime ;
196+ return wakeTime ;
197197}
198198
199- struct timeval TaskQueue::reschedule (ExTask &task, task_type_t &curTaskType) {
199+ hrtime_t TaskQueue::reschedule (ExTask &task, task_type_t &curTaskType) {
200200 EventuallyPersistentEngine *epe = ObjectRegistry::onSwitchThread (NULL , true );
201- struct timeval rv = _reschedule (task, curTaskType);
201+ hrtime_t rv = _reschedule (task, curTaskType);
202202 ObjectRegistry::onSwitchThread (epe);
203203 return rv;
204204}
@@ -227,9 +227,8 @@ void TaskQueue::schedule(ExTask &task) {
227227}
228228
229229void TaskQueue::_wake (ExTask &task) {
230- struct timeval now;
231230 size_t numReady = 0 ;
232- gettimeofday (& now, NULL );
231+ const hrtime_t now = gethrtime ( );
233232
234233 LockHolder lh (mutex);
235234 LOG (EXTENSION_LOG_DEBUG, " %s: Wake a task \" %s\" id %d" , name.c_str (),
@@ -261,7 +260,7 @@ void TaskQueue::_wake(ExTask &task) {
261260
262261 while (!notReady.empty ()) {
263262 ExTask tid = notReady.front ();
264- if (less_eq_tv ( tid->waketime , now) || tid->isdead ()) {
263+ if (tid->waketime <= now || tid->isdead ()) {
265264 readyQueue.push (tid);
266265 numReady++;
267266 } else {
0 commit comments