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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/src/rules/state.c +58 -1
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48d84abbe4090ab34d7cdc91409cf4d8051afce1
4
- data.tar.gz: 196e6c8eb885f12d46a32deaaf6d6d0161e6ec44
3
+ metadata.gz: 22182a3f342a7baddc4202f0a48cd221657b54db
4
+ data.tar.gz: 154047fd34c12c8c2203273d984d0f746a0d546e
5
5
  SHA512:
6
- metadata.gz: 109df08236d6b157e1f631ea502960ae5205ecdeef2a7bb55769978bbd7b62f1b4988e5154b602f6a2ac125c2927956bf39e3bce48add692549d4fc58b7a6e5c
7
- data.tar.gz: 8971e18c1d4b4a479e29712db7fa3fec15de5df1c511aa7bf705fcf6da0e10d1a5ecf9b0a705b15cd92bdb8501b31b66888702ba68980a82278ea3902cfa5f98
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
- return deleteSession(tree, rulesBinding, sid, sidHash);
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.48
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-02-25 00:00:00.000000000 Z
11
+ date: 2018-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake