1. 05 Apr, 2019 9 commits
  2. 04 Apr, 2019 19 commits
  3. 03 Apr, 2019 11 commits
  4. 02 Apr, 2019 1 commit
    • Amir Hardon's avatar
      Make sure _handleAppFrame is only registered once per frame (#30346) · b6afc16a
      Amir Hardon authored
      There were 2 possible scenarios in which _handleAppFrame is added more than once as a frame callback. When this happens it is possible that the second invocation will try to access _nextFrame.image when _nextFrame is null and crash. The 2 scenarios are:
      
      Scenario 1
      
      A GIF frame is decoded and a Flutter frame is executed before it's time to show the next GIF frame.
      The timer that's waiting for enough time to elapse is invoked, and schedules a callback for the next Flutter frame(here).
      Before the next Flutter frame is executed, MultiFrameImageStreamCompleter#removeListener is called followed by ``MultiFrameImageStreamCompleter#addListenerthat is invoking_decodeNextFrameAndSchedule` which is adding `_handleAppFrame` again as a next frame callback.
      Scenario 2
      removeListener and addListener are called multiple times in succession, every call to addListener can result in another registration of _handleAppFrame to the next Flutter frame callbacks list.
      
      This patch fixes the issue by guarding against a second registration of _handleAppFrame.
      b6afc16a