diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2018-07-30 12:50:02 -0700 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2018-07-30 16:42:38 -0700 |
commit | a1fe48d721d8d59e91efd00fd85cc2cca217bdde (patch) | |
tree | efee0d2d726e4ff34c72d7706700e396eed4219f | |
parent | b738d9a912fc04aa22da5751995c51cd80c2a1c9 (diff) | |
download | servo-a1fe48d721d8d59e91efd00fd85cc2cca217bdde.tar.gz servo-a1fe48d721d8d59e91efd00fd85cc2cca217bdde.zip |
Use JS_GetArrayBufferViewBuffer with JS_DetachArrayBuffer
-rw-r--r-- | components/script/dom/audiobuffer.rs | 12 |
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; |