summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2019-03-15 20:49:41 +0100
committerBert Belder <bertbelder@gmail.com>2019-03-15 21:57:22 +0100
commit62761a4e3a12e123d32c7d78a06f6565118d63b4 (patch)
treef7684602b22da9ffe461ec9ece9169098b258afe
parentbb642e8c7c9f8ab16540d2e3b1ef6a5543ded91e (diff)
core: remove reset() from SharedQueue API
-rw-r--r--core/isolate.rs1
-rw-r--r--core/shared_queue.js24
-rw-r--r--core/shared_queue.rs32
-rw-r--r--core/shared_queue_test.js7
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");
}