]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
runtime: hoist broken check in streaming mode
authorJustin Viiret <justin.viiret@intel.com>
Fri, 18 Dec 2015 04:50:56 +0000 (15:50 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Tue, 1 Mar 2016 00:20:22 +0000 (11:20 +1100)
src/runtime.c

index 335a83bc51e9568e7ec5819f219c3fb3ebcb3ac4..27740af22ae0eeb493ff430fc5ea0fea5dd5282b 100644 (file)
@@ -1184,13 +1184,7 @@ void rawStreamExec(struct hs_stream *stream_state, struct hs_scratch *scratch) {
     assert(scratch);
 
     char *state = getMultiState(stream_state);
-
-    u8 broken = getBroken(state);
-    if (unlikely(broken)) {
-        assert(broken == BROKEN_FROM_USER || broken == BROKEN_EXHAUSTED);
-        scratch->core_info.broken = broken;
-        return;
-    }
+    assert(!getBroken(state));
 
     DEBUG_PRINTF("::: streaming rose ::: offset = %llu len = %zu\n",
                  stream_state->offset, scratch->core_info.len);
@@ -1215,13 +1209,7 @@ void pureLiteralStreamExec(struct hs_stream *stream_state,
     assert(scratch);
 
     char *state = getMultiState(stream_state);
-
-    u8 broken = getBroken(state);
-    if (unlikely(broken)) {
-        assert(broken == BROKEN_FROM_USER || broken == BROKEN_EXHAUSTED);
-        scratch->core_info.broken = broken;
-        return;
-    }
+    assert(!getBroken(state));
 
     const struct RoseEngine *rose = stream_state->rose;
     const struct HWLM *ftable = getFLiteralMatcher(rose);
@@ -1335,6 +1323,16 @@ hs_error_t hs_scan_stream_internal(hs_stream_t *id, const char *data,
     if (!id->offset && rose->boundary.reportZeroOffset) {
         DEBUG_PRINTF("zero reports\n");
         processReportList(rose, rose->boundary.reportZeroOffset, 0, scratch);
+        broken = getBroken(state);
+        if (unlikely(broken)) {
+            DEBUG_PRINTF("stream is broken, halting scan\n");
+            if (broken == BROKEN_FROM_USER) {
+                return HS_SCAN_TERMINATED;
+            } else {
+                assert(broken == BROKEN_EXHAUSTED);
+                return HS_SUCCESS;
+            }
+        }
     }
 
     switch (rose->runtimeImpl) {