@@ -115,9 +115,6 @@ static void dtm_sleep(timestamp_t interval)
115115{
116116 struct timespec ts ;
117117 struct timespec rem ;
118- #if TRACE_SLEEP_TIME
119- timestamp_t now = dtm_get_current_time ();
120- #endif
121118 ts .tv_sec = 0 ;
122119 ts .tv_nsec = interval * 1000 ;
123120
@@ -126,17 +123,6 @@ static void dtm_sleep(timestamp_t interval)
126123 Assert (errno == EINTR );
127124 ts = rem ;
128125 }
129- #if TRACE_SLEEP_TIME
130- totalSleepTime += dtm_get_current_time () - now ;
131- if (now > prevReportTime + USEC * 10 ) {
132- prevReportTime = now ;
133- if (firstReportTime == 0 ) {
134- firstReportTime = now ;
135- } else {
136- fprintf (stderr , "Sleep %lu of %lu usec (%f%%)\n" , totalSleepTime , now - firstReportTime , totalSleepTime * 100.0 /(now - firstReportTime ));
137- }
138- }
139- #endif
140126}
141127
142128static cid_t dtm_get_cid ()
@@ -155,7 +141,23 @@ static cid_t dtm_sync(cid_t global_cid)
155141 cid_t local_cid ;
156142 while ((local_cid = dtm_get_cid ()) < global_cid ) {
157143 SpinLockRelease (& local -> lock );
144+ #if TRACE_SLEEP_TIME
145+ {
146+ timestamp_t now = dtm_get_current_time ();
147+ #endif
158148 dtm_sleep (global_cid - local_cid );
149+ #if TRACE_SLEEP_TIME
150+ totalSleepTime += dtm_get_current_time () - now ;
151+ if (now > prevReportTime + USEC * 10 ) {
152+ prevReportTime = now ;
153+ if (firstReportTime == 0 ) {
154+ firstReportTime = now ;
155+ } else {
156+ fprintf (stderr , "Sleep %lu of %lu usec (%f%%)\n" , totalSleepTime , now - firstReportTime , totalSleepTime * 100.0 /(now - firstReportTime ));
157+ }
158+ }
159+ }
160+ #endif
159161 SpinLockAcquire (& local -> lock );
160162 }
161163 return global_cid ;
@@ -449,7 +451,23 @@ bool DtmXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot)
449451 {
450452 DTM_TRACE ((stderr , "%d: wait for in-doubt transaction %u in snapshot %lu\n" , getpid (), xid , dtm_tx .snapshot ));
451453 SpinLockRelease (& local -> lock );
454+ #if TRACE_SLEEP_TIME
455+ {
456+ timestamp_t now = dtm_get_current_time ();
457+ #endif
452458 dtm_sleep (delay );
459+ #if TRACE_SLEEP_TIME
460+ totalSleepTime += dtm_get_current_time () - now ;
461+ if (now > prevReportTime + USEC * 10 ) {
462+ prevReportTime = now ;
463+ if (firstReportTime == 0 ) {
464+ firstReportTime = now ;
465+ } else {
466+ fprintf (stderr , "Sleep %lu of %lu usec (%f%%)\n" , totalSleepTime , now - firstReportTime , totalSleepTime * 100.0 /(now - firstReportTime ));
467+ }
468+ }
469+ }
470+ #endif
453471 if (delay * 2 <= MAX_WAIT_TIMEOUT ) {
454472 delay *= 2 ;
455473 }
0 commit comments