aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2018-07-30 12:50:02 -0700
committerManish Goregaokar <manishsmail@gmail.com>2018-07-30 16:42:38 -0700
commita1fe48d721d8d59e91efd00fd85cc2cca217bdde (patch)
treeefee0d2d726e4ff34c72d7706700e396eed4219f
parentb738d9a912fc04aa22da5751995c51cd80c2a1c9 (diff)
downloadservo-a1fe48d721d8d59e91efd00fd85cc2cca217bdde.tar.gz
servo-a1fe48d721d8d59e91efd00fd85cc2cca217bdde.zip
Use JS_GetArrayBufferViewBuffer with JS_DetachArrayBuffer
-rw-r--r--components/script/dom/audiobuffer.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/components/script/dom/audiobuffer.rs b/components/script/dom/audiobuffer.rs
index c95a04cdac3..3c98cd8a86c 100644
--- a/components/script/dom/audiobuffer.rs
+++ b/components/script/dom/audiobuffer.rs
@@ -11,8 +11,10 @@ use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::bindings::root::DomRoot;
use dom::window::Window;
use dom_struct::dom_struct;
-use js::jsapi::{DetachDataDisposition, Heap, JSAutoCompartment, JSContext, JSObject, JS_DetachArrayBuffer};
+use js::jsapi::{DetachDataDisposition, Heap, JSAutoCompartment, JSContext, JSObject};
+use js::jsapi::JS_GetArrayBufferViewBuffer;
use js::rust::CustomAutoRooterGuard;
+use js::rust::wrappers::JS_DetachArrayBuffer;
use js::typedarray::{CreateWith, Float32Array};
use servo_media::audio::buffer_source_node::AudioBuffer as ServoMediaAudioBuffer;
use std::cmp::min;
@@ -160,8 +162,12 @@ impl AudioBuffer {
typedarray!(in(cx) let array: Float32Array = channel.get());
if let Ok(array) = array {
let data = array.to_vec();
- let _ =
- JS_DetachArrayBuffer(cx, channel.handle(), DetachDataDisposition::KeepData);
+ let mut is_shared = false;
+ rooted!(in (cx) let view_buffer =
+ JS_GetArrayBufferViewBuffer(cx, channel.handle(), &mut is_shared));
+ // This buffer is always created unshared
+ debug_assert!(!is_shared);
+ let _ = JS_DetachArrayBuffer(cx, view_buffer.handle(), DetachDataDisposition::KeepData);
data
} else {
return None;