mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
style: Try to collect some more crash information so that we can diagnose this better.
Differential Revision: https://phabricator.services.mozilla.com/D59704
This commit is contained in:
parent
df01cec675
commit
b038924d44
1 changed files with 38 additions and 1 deletions
|
@ -136,6 +136,27 @@ impl StyleSource {
|
|||
let _ = write!(writer, " -> {:?}", self.read(guard).declarations());
|
||||
}
|
||||
|
||||
// This is totally unsafe, should be removed when we figure out the cause of
|
||||
// bug 1607553.
|
||||
unsafe fn dump_unchecked<W: Write>(&self, writer: &mut W) {
|
||||
if let Some(ref rule) = self.0.as_first() {
|
||||
let rule = rule.read_unchecked();
|
||||
let _ = write!(writer, "{:?}", rule.selectors);
|
||||
}
|
||||
let _ = write!(writer, " -> {:?}", self.read_unchecked().declarations());
|
||||
}
|
||||
|
||||
// This is totally unsafe, should be removed when we figure out the cause of
|
||||
// bug 1607553.
|
||||
#[inline]
|
||||
unsafe fn read_unchecked(&self) -> &PropertyDeclarationBlock {
|
||||
let block: &Locked<PropertyDeclarationBlock> = match self.0.borrow() {
|
||||
ArcUnionBorrow::First(ref rule) => &rule.get().read_unchecked().block,
|
||||
ArcUnionBorrow::Second(ref block) => block.get(),
|
||||
};
|
||||
block.read_unchecked()
|
||||
}
|
||||
|
||||
/// Read the style source guard, and obtain thus read access to the
|
||||
/// underlying property declaration block.
|
||||
#[inline]
|
||||
|
@ -1720,7 +1741,23 @@ impl Drop for StrongRuleNode {
|
|||
}
|
||||
|
||||
if cfg!(debug_assertions) || crate::gecko_bindings::structs::GECKO_IS_NIGHTLY {
|
||||
assert!(node.children.read().is_empty());
|
||||
let children = node.children.read();
|
||||
if !children.is_empty() {
|
||||
let mut crash_str = vec![];
|
||||
unsafe {
|
||||
// Try to unsafely collect some information of this before
|
||||
// crashing the process.
|
||||
if let Some(ref s) = node.source {
|
||||
s.dump_unchecked(&mut crash_str);
|
||||
crash_str.push(b'\n');
|
||||
}
|
||||
children.each(|child| {
|
||||
(*child.ptr()).source.as_ref().unwrap().dump_unchecked(&mut crash_str);
|
||||
crash_str.push(b'\n');
|
||||
});
|
||||
}
|
||||
panic!("Children left in the rule tree on drop: {}", String::from_utf8_lossy(&crash_str).trim());
|
||||
}
|
||||
}
|
||||
|
||||
if node.parent.is_none() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue