]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
roseFlushLastByteHistory: iter state on stack
authorJustin Viiret <justin.viiret@intel.com>
Mon, 4 Jan 2016 02:42:21 +0000 (13:42 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Tue, 1 Mar 2016 00:20:36 +0000 (11:20 +1100)
src/rose/match.h

index 86e22183145d552273240312c3bbeb1d5efc09eb..19a07c9a1a4ae0935a314a52d8cecbe62d70d193 100644 (file)
@@ -268,8 +268,6 @@ void update_depth(struct RoseContext *tctxt, u8 depth) {
     tctxt->depth = d;
 }
 
-/* Note: uses the stashed sparse iter state; cannot be called from
- * anybody else who is using it */
 static rose_inline
 void roseFlushLastByteHistory(const struct RoseEngine *t, u8 *state,
                               u64a currEnd, struct RoseContext *tctxt) {
@@ -289,13 +287,16 @@ void roseFlushLastByteHistory(const struct RoseEngine *t, u8 *state,
 
     DEBUG_PRINTF("flushing\n");
 
-    const struct mmbit_sparse_iter *it
-        = (const void *)((const char *)t + t->lastByteHistoryIterOffset);
+    const struct mmbit_sparse_iter *it =
+        getByOffset(t, t->lastByteHistoryIterOffset);
+    assert(ISALIGNED(it));
+
     const u32 numStates = t->rolesWithStateCount;
     void *role_state = getRoleState(state);
 
-    mmbit_sparse_iter_unset(role_state, numStates, it,
-                            scratch->sparse_iter_state);
+    struct mmbit_sparse_state si_state[MAX_SPARSE_ITER_STATES];
+
+    mmbit_sparse_iter_unset(role_state, numStates, it, si_state);
 }
 
 #endif