Author: Tobias Weber <tobias_webe...@gmx.de>
Branch: c8-overheads-instrumentation
Changeset: r2031:a73dbda25da5
Date: 2017-03-14 21:25 +0100
http://bitbucket.org/pypy/stmgc/changeset/a73dbda25da5/

Log:    Fix missing duration measurement of inevitable transactions'
        validation and initialization of duration struct

diff --git a/c8/stm/core.c b/c8/stm/core.c
--- a/c8/stm/core.c
+++ b/c8/stm/core.c
@@ -156,10 +156,10 @@
 
 static bool _stm_validate(void)
 {
+    /* returns true if we reached a valid state, or false if
+       we need to abort now */
     start_timer();
 
-    /* returns true if we reached a valid state, or false if
-       we need to abort now */
     dprintf(("_stm_validate() at cl=%p, rev=%lu\n", 
STM_PSEGMENT->last_commit_log_entry,
              STM_PSEGMENT->last_commit_log_entry->rev_num));
     /* go from last known entry in commit log to the
@@ -173,6 +173,8 @@
 
     if (STM_PSEGMENT->transaction_state == TS_INEVITABLE) {
         assert(first_cl->next == INEV_RUNNING);
+
+        stop_timer_and_publish(STM_DURATION_VALIDATION);
         return true;
     }
 
diff --git a/c8/stm/timing.h b/c8/stm/timing.h
--- a/c8/stm/timing.h
+++ b/c8/stm/timing.h
@@ -5,30 +5,31 @@
 /* Use raw monotonic time, i.e., solely based on local hardware (no NTP
    adjustments) as in prof.c to obtain values comparable with total program
    runtime. */
-#define start_timer() struct timespec start, stop, duration = { 0, 0 };      \
+#define start_timer() struct timespec start, stop;                             
\
+                      struct timespec duration = { .tv_sec = 0, .tv_nsec = 0 
};\
                       continue_timer()
 
 /* Must use start_timer before using this macro. */
-#define get_duration() duration.tv_sec =                                     \
-                          stop.tv_sec - start.tv_sec + duration.tv_sec;      \
-                       duration.tv_nsec =                                    \
+#define get_duration() duration.tv_sec =                                    \
+                          stop.tv_sec - start.tv_sec + duration.tv_sec;     \
+                       duration.tv_nsec =                                   \
                           stop.tv_nsec - start.tv_nsec + duration.tv_nsec;
 
-#define pause_timer() clock_gettime(CLOCK_MONOTONIC_RAW, &stop);             \
+#define pause_timer() clock_gettime(CLOCK_MONOTONIC_RAW, &stop);            \
                       get_duration()
 
-#define stm_duration_payload(duration)                                       \
-    stm_timing_event_payload_data_t stm_duration_data =                      \
-        { .duration = &duration };                                           \
-    stm_timing_event_payload_t stm_duration_payload =                        \
+#define stm_duration_payload(duration)                                      \
+    stm_timing_event_payload_data_t stm_duration_data =                     \
+        { .duration = &duration };                                          \
+    stm_timing_event_payload_t stm_duration_payload =                       \
         { STM_EVENT_PAYLOAD_DURATION, stm_duration_data };
 
-#define publish_event(event)                                                 \
-    (timing_enabled() ?                                                      \
-        stmcb_timing_event(                                                  \
-            STM_SEGMENT->running_thread, event, &stm_duration_payload) :     \
+#define publish_event(event)                                                \
+    (timing_enabled() ?                                                     \
+        stmcb_timing_event(                                                 \
+            STM_SEGMENT->running_thread, event, &stm_duration_payload) :    \
         (void)0);
 
-#define stop_timer_and_publish(event) pause_timer()                          \
-                                      stm_duration_payload(duration)         \
+#define stop_timer_and_publish(event) pause_timer()                         \
+                                      stm_duration_payload(duration)        \
                                       publish_event(event)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to