durable_rules 0.34.48 → 0.34.49
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/src/rules/state.c +58 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22182a3f342a7baddc4202f0a48cd221657b54db
|
4
|
+
data.tar.gz: 154047fd34c12c8c2203273d984d0f746a0d546e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 642cf6196149419c42a710d2509a366d2843dac644e2ca55b3590a2335dce2557ece809b9015c77372e420a40eeb1e0deaec0c5f0d60ff9710653116d66eb0bd
|
7
|
+
data.tar.gz: 6fdc663a2161aff98a5e7d432cde22b1128e1c1f075dde20107bf487698a74b219fee761f739ec20596602442b34ce967686e6da63efe4ec5af3dc237eee1b25
|
data/src/rules/state.c
CHANGED
@@ -56,6 +56,57 @@ static unsigned int evictEntry(ruleset *tree) {
|
|
56
56
|
return result;
|
57
57
|
}
|
58
58
|
|
59
|
+
static void deleteEntry(ruleset *tree, char *sid, unsigned int sidHash) {
|
60
|
+
unsigned int bucket = sidHash % tree->stateBucketsLength;
|
61
|
+
unsigned int offset = tree->stateBuckets[bucket];
|
62
|
+
unsigned int lastOffset = UNDEFINED_HASH_OFFSET;
|
63
|
+
unsigned char found = 0;
|
64
|
+
while (!found && offset != UNDEFINED_HASH_OFFSET) {
|
65
|
+
stateEntry *current = &tree->state[offset];
|
66
|
+
if (current->sidHash == sidHash) {
|
67
|
+
if (!strcmp(current->sid, sid)) {
|
68
|
+
if (lastOffset == UNDEFINED_HASH_OFFSET) {
|
69
|
+
tree->stateBuckets[bucket] = current->nextHashOffset;
|
70
|
+
} else {
|
71
|
+
tree->state[lastOffset].nextHashOffset = current->nextHashOffset;
|
72
|
+
}
|
73
|
+
|
74
|
+
if (current->state) {
|
75
|
+
free(current->state);
|
76
|
+
current->state = NULL;
|
77
|
+
}
|
78
|
+
|
79
|
+
free(current->sid);
|
80
|
+
current->sid = NULL;
|
81
|
+
current->sidHash = 0;
|
82
|
+
current->bindingIndex = 0;
|
83
|
+
current->lastRefresh = 0;
|
84
|
+
current->jo.propertiesLength = 0;
|
85
|
+
found = 1;
|
86
|
+
|
87
|
+
|
88
|
+
// remove entry from lru double linked list
|
89
|
+
if (current->prevLruOffset != UNDEFINED_HASH_OFFSET) {
|
90
|
+
tree->state[current->prevLruOffset].nextLruOffset = current->nextLruOffset;
|
91
|
+
if (tree->mruStateOffset == offset) {
|
92
|
+
tree->mruStateOffset = current->prevLruOffset;
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
if (current->nextLruOffset != UNDEFINED_HASH_OFFSET) {
|
97
|
+
tree->state[current->nextLruOffset].prevLruOffset = current->prevLruOffset;
|
98
|
+
if (tree->lruStateOffset == offset) {
|
99
|
+
tree->lruStateOffset = current->nextLruOffset;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
lastOffset = offset;
|
106
|
+
offset = current->nextHashOffset;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
59
110
|
static unsigned int addEntry(ruleset *tree, char *sid, unsigned int sidHash) {
|
60
111
|
unsigned newOffset;
|
61
112
|
if (tree->stateLength == tree->maxStateLength) {
|
@@ -628,5 +679,11 @@ unsigned int deleteState(unsigned int handle, char *sid) {
|
|
628
679
|
}
|
629
680
|
|
630
681
|
unsigned int sidHash = fnv1Hash32(sid, strlen(sid));
|
631
|
-
|
682
|
+
result = deleteSession(tree, rulesBinding, sid, sidHash);
|
683
|
+
if (result != RULES_OK) {
|
684
|
+
return result;
|
685
|
+
}
|
686
|
+
|
687
|
+
deleteEntry(tree, sid, sidHash);
|
688
|
+
return RULES_OK;
|
632
689
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: durable_rules
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.34.
|
4
|
+
version: 0.34.49
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesus Ruiz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|