Auto merge of #12955 - nox:try-borrow, r=emilio

Use try_borrow instead of borrow_state

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12955)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-08-21 00:47:10 -05:00 committed by GitHub
commit 530c36a99a
4 changed files with 44 additions and 63 deletions

View file

@ -17,7 +17,7 @@ use wrappers::CefWrap;
use compositing::windowing::{WindowNavigateMsg, WindowEvent};
use glutin_app;
use libc::c_int;
use std::cell::{Cell, RefCell, BorrowState};
use std::cell::{Cell, RefCell};
use std::ptr;
use std::rc::Rc;
use std::sync::atomic::{AtomicIsize, Ordering};
@ -183,24 +183,18 @@ impl ServoCefBrowserExtensions for CefBrowser {
}
fn send_window_event(&self, event: WindowEvent) {
self.downcast().message_queue.borrow_mut().push(event);
let browser = self.downcast();
loop {
match self.downcast().servo_browser.borrow_state() {
BorrowState::Unused => {
let event = match self.downcast().message_queue.borrow_mut().pop() {
None => return,
Some(event) => event,
};
self.downcast().servo_browser.borrow_mut().handle_event(event);
}
_ => {
// We're trying to send an event while processing another one. This will
// cause general badness, so queue up that event instead of immediately
// processing it.
break
}
if let Ok(mut servo_browser) = browser.servo_browser.try_borrow_mut() {
servo_browser.handle_event(event);
while let Some(event) = browser.message_queue.borrow_mut().pop() {
servo_browser.handle_event(event);
}
} else {
// If we fail to borrow mutably, this means we're trying to send an
// event while processing another one. This will cause general badness,
// we just queue up that event instead of immediately processing it.
browser.message_queue.borrow_mut().push(event);
}
}

View file

@ -2,12 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#![feature(borrow_state)]
#![feature(box_syntax)]
#![feature(core_intrinsics)]
#![feature(filling_drop)]
#![feature(link_args)]
#![feature(plugin)]
#![feature(try_borrow)]
#![feature(unicode)]
#![feature(unsafe_no_drop_flag)]