diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2015-12-04 21:19:58 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2015-12-04 21:19:58 +0530 |
commit | b32128e299212065d298b19106b9b7db970c2f23 (patch) | |
tree | 4a476c3044bf10af83a0b65e7a555b2c3e341ea8 /components/script/dom | |
parent | 9c2690347232ee6a2b16e28021e494ed17a0f274 (diff) | |
parent | d891e75d9d51a4349c5e15af0d99b4a2cb7c8ac7 (diff) | |
download | servo-b32128e299212065d298b19106b9b7db970c2f23.tar.gz servo-b32128e299212065d298b19106b9b7db970c2f23.zip |
Auto merge of #8768 - vegayours:8616_intermittent_option_unwrap_in_timers, r=jdm
fix intermittent Option::unwrap in timers
fixes intermittent #8616
This intermittent indicates real problem in code.
Lets consider such code:
```javascript
// timer 1
setTimeout(function() {
//timer 2
setTimeout(function() {}, 0);
}, 0);
```
When we receive event to fire timer 1 it will be selected and extracted from active timers list in fire_timer function. During timer 1 handler execution we will schedule timer 2 and request timer event for it. But it will be executed during same fire_timer call because of 0 timeout. And as a result we will have empty timers list and expecting event for timer 2 that will crash in assert.
I'm not sure that all I've written is clear, but we have something like this:
```
install timer 1 -> [1] in timers list
push and expect timer event 1 -> expected_event=1
received timer event 1
fire_timer()
select timer 1 to execute -> [] in timers list
execute timer 1 handler
install timer 2 -> [2] in timers list
push and expect timer event 2 -> expected_event=2
select timer 2 to execute (because of 0 timeout) -> [] in tiemrs list
execute timer 2 handler
expected_event=2 is dangling
received timer event 2
fire_timer() -> BOOM
```
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8768)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
0 files changed, 0 insertions, 0 deletions