]> sigrok.org Git - libsigrok.git/commitdiff
sw_limits: start msec timeout period only after start() call
authorGerhard Sittig <redacted>
Sun, 31 May 2020 09:22:07 +0000 (11:22 +0200)
committerGerhard Sittig <redacted>
Sun, 31 May 2020 21:39:28 +0000 (23:39 +0200)
When application code used the common SW limits API, the call sequence
of init() then set() then check() already kept expiring, which is rather
unexpected. The timeout period should only start when start() is called,
check() should not signal expiration before the start() call.

The specific use case is the combination of an msecs timeout and capture
ratio when triggers are used. The post-trigger period only starts when
the trigger match was seen, even though its length is already known when
the acquisition starts. It's desirable to run the start() call for the
post-trigger timeout late, and not terminate the acquisition before the
trigger match.

src/sw_limits.c

index 37c28667987df4f643e584466ae0b3e3eb15453f..9d80c06bf1b3dcd8bc451ccb548a8e5b53df4684 100644 (file)
@@ -43,9 +43,7 @@
  */
 SR_PRIV void sr_sw_limits_init(struct sr_sw_limits *limits)
 {
-       limits->limit_samples = 0;
-       limits->limit_frames = 0;
-       limits->limit_msec = 0;
+       memset(limits, 0, sizeof(*limits));
 }
 
 /**
@@ -153,7 +151,7 @@ SR_PRIV gboolean sr_sw_limits_check(struct sr_sw_limits *limits)
                }
        }
 
-       if (limits->limit_msec) {
+       if (limits->limit_msec && limits->start_time) {
                guint64 now;
                now = g_get_monotonic_time();
                if (now > limits->start_time &&