]> git.scottworley.com Git - tattlekey/commitdiff
client: queue_try_add_ignoring_errors()
authorScott Worley <scottworley@scottworley.com>
Mon, 9 Oct 2023 19:34:29 +0000 (12:34 -0700)
committerScott Worley <scottworley@scottworley.com>
Wed, 11 Oct 2023 01:48:43 +0000 (18:48 -0700)
client/tattlekey.c

index aadf49dd9b58d1ad36c175128583d648c4a136c8..352b84c4be8ec35987beb68ad6a4581332b62064 100644 (file)
@@ -21,6 +21,17 @@ queue_t queue;
 
 uint32_t time_s() { return time_us_64() / 1000000ul; }
 
 
 uint32_t time_s() { return time_us_64() / 1000000ul; }
 
+/* Often we don't bother checking for failure (full queue) because
+ *   1. The best thing to do in this unfortunate situation is to blithely
+ *      continue, dropping some events; continuing is better than stopping.
+ *   2. Neither interrupt context nor queue-processing context can block
+ *      until space is available, or even sit around & blink the LED to
+ *      signal a problem.
+ * (We also get a bit of type safety by taking event_t* rather than void*.) */
+static void queue_try_add_ignoring_errors(queue_t *q, event_t *e) {
+  queue_try_add(q, e);
+}
+
 static void button_pressed() {
   /* This runs in interrupt context; don't linger.  */
   static uint64_t last_button_press_time = 0;
 static void button_pressed() {
   /* This runs in interrupt context; don't linger.  */
   static uint64_t last_button_press_time = 0;
@@ -31,9 +42,7 @@ static void button_pressed() {
     event_t e;
     e.type = BUTTONPRESS;
     e.buttonpress.timestamp = now;
     event_t e;
     e.type = BUTTONPRESS;
     e.buttonpress.timestamp = now;
-    /* We don't check for failure (full queue) here because there's not much to
-     * be done about it. */
-    queue_try_add(&queue, &e);
+    queue_try_add_ignoring_errors(&queue, &e);
   }
 }
 
   }
 }