)]}'
{
  "commit": "bb7ee95c7184ced730c7e6885e87229cdd671f7a",
  "tree": "33b42c611a1b3109330e5405a7ec80eee56d0462",
  "parents": [
    "1d2fa9a1c3a6c481e2d8c6937a4f77cb83ae4716"
  ],
  "author": {
    "name": "Victor Boivie",
    "email": "boivie@webrtc.org",
    "time": "Wed May 05 10:36:52 2021"
  },
  "committer": {
    "name": "WebRTC LUCI CQ",
    "email": "webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed May 05 13:13:03 2021"
  },
  "message": "dcsctp: Handle starting timer from timer callback\n\nThis was caught in an integration test which had stricter assertions\nthan the FakeTimeout which is used in unit tests, so the first thing was\nto add the same assertions to the FakeTimeout.\n\nThe issue is that when a Timer triggers, and if it\u0027s set to\nautomatically restart (possibly with an exponential backoff), the\n`is_running_` field was set to true while the timer callback was called\nto allow the client to know that the timer is in fact running, but the\ntimer was actually not started until the callback returned. Which made\nsense, as the callback can with its return value override the duration,\nwhich should affect the backoff algorithm.\n\nThe problem was when a timer was manually started within the callback.\nAs the Timer itself thought that it was already running, it first would\nStop() the underlying Timeout, then Start(). But calling Stop() on a\ntimeout that is not running is illegal, which set of assertions.\n\nSo the solution is to don\u0027t lie; Don\u0027t say that a timer is running when\nit\u0027s not. Make sure that the timer is running when the timer callback is\ntriggered, which makes it consistent at all times. That may result in\nunnecessary timeout invocations (stopping and starting), but that\u0027s not\ntoo expensive.\n\nBug: webrtc:12614\nChange-Id: I7b4447ccd88bd43d181e158f0d29b0770c8a3fd6\nReviewed-on: https://webrtc-review.googlesource.com/c/src/+/217522\nReviewed-by: Florent Castelli \u003corphis@webrtc.org\u003e\nCommit-Queue: Victor Boivie \u003cboivie@webrtc.org\u003e\nCr-Commit-Position: refs/heads/master@{#33926}\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ada4754a27200c418a70e6ca0e816cdd72f9369e",
      "old_mode": 33188,
      "old_path": "net/dcsctp/timer/fake_timeout.h",
      "new_id": "927e6b2808817326f6bc1358d05aec0d55723ace",
      "new_mode": 33188,
      "new_path": "net/dcsctp/timer/fake_timeout.h"
    },
    {
      "type": "modify",
      "old_id": "f3c33ea971a2852aecf8178bb5c88f92fb0c7a0e",
      "old_mode": 33188,
      "old_path": "net/dcsctp/timer/timer.cc",
      "new_id": "593d639fa7e175d561f1771273472afdf0b4d69a",
      "new_mode": 33188,
      "new_path": "net/dcsctp/timer/timer.cc"
    },
    {
      "type": "modify",
      "old_id": "82b92ef395138b1d26865b58f4874a62053914f2",
      "old_mode": 33188,
      "old_path": "net/dcsctp/timer/timer_test.cc",
      "new_id": "a403bb6b4b979c4d27933f040de89037c8903a78",
      "new_mode": 33188,
      "new_path": "net/dcsctp/timer/timer_test.cc"
    }
  ]
}
