diff options
author | Bert Belder <bertbelder@gmail.com> | 2019-03-15 20:49:41 +0100 |
---|---|---|
committer | Bert Belder <bertbelder@gmail.com> | 2019-03-15 21:57:22 +0100 |
commit | 62761a4e3a12e123d32c7d78a06f6565118d63b4 (patch) | |
tree | f7684602b22da9ffe461ec9ece9169098b258afe | |
parent | bb642e8c7c9f8ab16540d2e3b1ef6a5543ded91e (diff) |
core: remove reset() from SharedQueue API
-rw-r--r-- | core/isolate.rs | 1 | ||||
-rw-r--r-- | core/shared_queue.js | 24 | ||||
-rw-r--r-- | core/shared_queue.rs | 32 | ||||
-rw-r--r-- | core/shared_queue_test.js | 7 |
4 files changed, 34 insertions, 30 deletions
diff --git a/core/isolate.rs b/core/isolate.rs index 33b52da75..ef2da2a68 100644 --- a/core/isolate.rs +++ b/core/isolate.rs @@ -375,7 +375,6 @@ impl<B: Behavior> Future for Isolate<B> { self.respond()?; // The other side should have shifted off all the messages. assert_eq!(self.shared.size(), 0); - self.shared.reset(); } } diff --git a/core/shared_queue.js b/core/shared_queue.js index 36f5dc91b..756f86e72 100644 --- a/core/shared_queue.js +++ b/core/shared_queue.js @@ -22,7 +22,8 @@ } function reset() { - shared32.fill(0, 0, INDEX_RECORDS); + shared32[INDEX_NUM_RECORDS] = 0; + shared32[INDEX_NUM_SHIFTED_OFF] = 0; shared32[INDEX_HEAD] = HEAD_INIT; } @@ -34,6 +35,10 @@ return shared32[INDEX_NUM_RECORDS]; } + function size() { + return shared32[INDEX_NUM_RECORDS] - shared32[INDEX_NUM_SHIFTED_OFF]; + } + function setEnd(index, end) { shared32[INDEX_OFFSETS + index] = end; } @@ -77,17 +82,21 @@ /// Returns null if empty. function shift() { let i = shared32[INDEX_NUM_SHIFTED_OFF]; - if (i >= numRecords()) { + if (size() == 0) { + assert(i == 0); return null; } + let off = getOffset(i); let end = getEnd(i); - shared32[INDEX_NUM_SHIFTED_OFF] += 1; - return sharedBytes.subarray(off, end); - } - function size() { - return shared32[INDEX_NUM_RECORDS] - shared32[INDEX_NUM_SHIFTED_OFF]; + if (size() > 1) { + shared32[INDEX_NUM_SHIFTED_OFF] += 1; + } else { + reset(); + } + + return sharedBytes.subarray(off, end); } let asyncHandler = null; @@ -119,7 +128,6 @@ numRecords, size, push, - reset, shift }; diff --git a/core/shared_queue.rs b/core/shared_queue.rs index 8e3199504..1a8692b5f 100644 --- a/core/shared_queue.rs +++ b/core/shared_queue.rs @@ -36,12 +36,10 @@ impl SharedQueue { unsafe { deno_buf::from_raw_parts(ptr, len) } } - /// Clears the shared buffer. - pub fn reset(&mut self) { + fn reset(&mut self) { let s: &mut [u32] = self.as_u32_slice_mut(); - for i in 0..INDEX_RECORDS { - s[i] = 0; - } + s[INDEX_NUM_RECORDS] = 0; + s[INDEX_NUM_SHIFTED_OFF] = 0; s[INDEX_HEAD] = HEAD_INIT as u32; } @@ -101,15 +99,20 @@ impl SharedQueue { pub fn shift<'a>(&'a mut self) -> Option<&'a [u8]> { let u32_slice = self.as_u32_slice(); let i = u32_slice[INDEX_NUM_SHIFTED_OFF] as usize; - if i >= self.num_records() { - assert_eq!(self.size(), 0); + if self.size() == 0 { + assert_eq!(i, 0); return None; } + let off = self.get_offset(i).unwrap(); let end = self.get_end(i).unwrap(); - let u32_slice = self.as_u32_slice_mut(); - u32_slice[INDEX_NUM_SHIFTED_OFF] += 1; + if self.size() > 1 { + let u32_slice = self.as_u32_slice_mut(); + u32_slice[INDEX_NUM_SHIFTED_OFF] += 1; + } else { + self.reset(); + } Some(&self.bytes[off..end]) } @@ -173,16 +176,12 @@ mod tests { let r = q.shift().unwrap(); assert_eq!(r.as_ref(), vec![8, 9, 10, 11].as_slice()); - assert_eq!(q.num_records(), 3); + assert_eq!(q.num_records(), 0); assert_eq!(q.size(), 0); assert!(q.shift().is_none()); assert!(q.shift().is_none()); - assert_eq!(q.num_records(), 3); - assert_eq!(q.size(), 0); - - q.reset(); assert_eq!(q.num_records(), 0); assert_eq!(q.size(), 0); } @@ -205,10 +204,11 @@ mod tests { assert_eq!(q.shift().unwrap().len(), RECOMMENDED_SIZE - 1); assert_eq!(q.size(), 1); - assert_eq!(q.shift().unwrap().len(), 1); - assert_eq!(q.size(), 0); assert!(!q.push(alloc_buf(1))); + + assert_eq!(q.shift().unwrap().len(), 1); + assert_eq!(q.size(), 0); } #[test] diff --git a/core/shared_queue_test.js b/core/shared_queue_test.js index 33000fd45..e1e4c9987 100644 --- a/core/shared_queue_test.js +++ b/core/shared_queue_test.js @@ -48,17 +48,14 @@ function main() { assert(r[1] == 9); assert(r[2] == 10); assert(r[3] == 11); - assert(q.numRecords() == 3); + assert(q.numRecords() == 0); assert(q.size() == 0); assert(q.shift() == null); assert(q.shift() == null); - assert(q.numRecords() == 3); - assert(q.size() == 0); - - q.reset(); assert(q.numRecords() == 0); assert(q.size() == 0); + libdeno.print("shared_queue_test.js ok\n"); } |