]> Kevux Git Server - fll/commitdiff
Regression: controller_time_micro() is waiting too long.
authorKevin Day <thekevinday@gmail.com>
Sun, 31 Oct 2021 04:00:42 +0000 (23:00 -0500)
committerKevin Day <thekevinday@gmail.com>
Sun, 31 Oct 2021 04:00:42 +0000 (23:00 -0500)
Turns out that my calculation is in milliseconds but the value is not in milliseconds (it says microseconds!).

Change this to milliseconds and update the time as appropriate.

level_3/controller/c/private-common.c
level_3/controller/c/private-common.h
level_3/controller/c/private-rule.c

index 7d0c4e324450e05d4342580146323d0e83659205..b5b13d8623f5bbf636f17ec6d53f5913f065a223 100644 (file)
@@ -923,16 +923,16 @@ extern "C" {
   }
 #endif // _di_controller_time_
 
-#ifndef _di_controller_time_micro_
-  struct timespec controller_time_micro(const f_number_unsigned_t microseconds) {
+#ifndef _di_controller_time_milliseconds_
+  struct timespec controller_time_milliseconds(const f_number_unsigned_t milliseconds) {
 
     struct timespec time;
-    time.tv_sec = microseconds / 1000;
-    time.tv_nsec = (time.tv_sec ? microseconds - time.tv_sec : microseconds) * 1000;
+    time.tv_sec = milliseconds > 1000 ? milliseconds / 1000 : 0;
+    time.tv_nsec = (time.tv_sec ? milliseconds - time.tv_sec : milliseconds) * 1000;
 
     return time;
   }
-#endif // _di_controller_time_micro_
+#endif // _di_controller_time_milliseconds_
 
 #ifdef __cplusplus
 } // extern "C"
index cbb6cbe214498418a83c5d69773b782a544d1911..0ed001a78bac58e27c9c882fa878e62267ed7cb6 100644 (file)
@@ -1531,7 +1531,7 @@ extern "C" {
   #define controller_thread_cleanup_interval_short_d    180       // 3 minutes in seconds.
   #define controller_thread_exit_process_cancel_wait_d  600000000 // 0.6 seconds in nanoseconds.
   #define controller_thread_exit_process_cancel_total_d 150       // 90 seconds in multiples of wait.
-  #define controller_thread_simulation_timeout_d        200000    // 0.2 seconds in microseconds.
+  #define controller_thread_simulation_timeout_d        200       // 0.2 seconds in milliseconds.
 
   #define controller_thread_signal_wait_timeout_seconds_d     70
   #define controller_thread_signal_wait_timeout_nanoseconds_d 0
@@ -2470,17 +2470,17 @@ extern "C" {
 #endif // _di_controller_time_
 
 /**
- * Convert microseconds to nanoseconds.
+ * Convert milliseconds to nanoseconds.
  *
- * @param microseconds
- *   The number of microseconds.
+ * @param milliseconds
+ *   The number of milliseconds.
  *
  * @return
  *   A time structure suitable for passing to nanosleep() and similar functions.
  */
-#ifndef _di_controller_time_micro_
-  extern struct timespec controller_time_micro(const f_number_unsigned_t microseconds) F_attribute_visibility_internal_d;
-#endif // _di_controller_time_micro_
+#ifndef _di_controller_time_milliseconds_
+  extern struct timespec controller_time_milliseconds(const f_number_unsigned_t milliseconds) F_attribute_visibility_internal_d;
+#endif // _di_controller_time_milliseconds_
 
 #ifdef __cplusplus
 } // extern "C"
index 12ffec776b138e79960207291ec9e365f4e0bdb6..89fccb6be006d91600ec08b60e4a35a2f5241c84 100644 (file)
@@ -1645,7 +1645,8 @@ extern "C" {
 
       // sleep for less than a second to better show simulation of synchronous vs asynchronous.
       {
-        struct timespec delay = controller_time_micro(controller_thread_simulation_timeout_d);
+        struct timespec delay = controller_time_milliseconds(controller_thread_simulation_timeout_d);
+
         nanosleep(&delay, 0);
       }
 
@@ -1896,7 +1897,8 @@ extern "C" {
 
       // sleep for less than a second to better show simulation of synchronous vs asynchronous.
       {
-        struct timespec delay = controller_time_micro(controller_thread_simulation_timeout_d);
+        struct timespec delay = controller_time_milliseconds(controller_thread_simulation_timeout_d);
+
         nanosleep(&delay, 0);
       }
 
@@ -2080,7 +2082,7 @@ extern "C" {
         }
 
         if (rerun_item->delay) {
-          struct timespec time = controller_time_micro(rerun_item->delay);
+          struct timespec time = controller_time_milliseconds(rerun_item->delay);
 
           if (nanosleep(&time, 0) < 0) {
             return -1;