durable_rules 0.34.48 → 0.34.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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