)]}'
{
  "commit": "216d1bbe2380a8118c17b54a171516a87caf5190",
  "tree": "a52eda441990007a9143d0ecc1f286541bd4a075",
  "parents": [
    "d1d5ba6f39df252b1ac4a8538950fece336066be"
  ],
  "author": {
    "name": "Takashi Iwai",
    "email": "tiwai@suse.de",
    "time": "Thu Nov 07 20:00:29 2019 +0100"
  },
  "committer": {
    "name": "Takashi Iwai",
    "email": "tiwai@suse.de",
    "time": "Thu Nov 07 20:00:29 2019 +0100"
  },
  "message": "ALSA: timer: Fix possible race at assigning a timer instance\n\nWhen a new timer instance is created and assigned to the active link\nin snd_timer_open(), the caller still doesn\u0027t (can\u0027t) set its callback\nand callback data.  In both the user-timer and the sequencer-timer\ncode, they do manually set up the callbacks after calling\nsnd_timer_open().  This has a potential risk of race when the timer\ninstance is added to the already running timer target, as the callback\nmight get triggered during setting up the callback itself.\n\nThis patch tries to address it by changing the API usage slightly:\n\n- An empty timer instance is created at first via the new function\n  snd_timer_instance_new().  This object isn\u0027t linked to the timer\n  list yet.\n- The caller sets up the callbacks and others stuff for the new timer\n  instance.\n- The caller invokes snd_timer_open() with this instance, so that it\u0027s\n  linked to the target timer.\n\nFor closing, do similarly:\n\n- Call snd_timer_close().  This unlinks the timer instance from the\n  timer list.\n- Free the timer instance via snd_timer_instance_free() after that.\n\nSigned-off-by: Takashi Iwai \u003ctiwai@suse.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8a13c09c85f730fc25d5f13a1104d5085d7962d3",
      "old_mode": 33188,
      "old_path": "include/sound/timer.h",
      "new_id": "a53e37bcd746f24fe3354d445eda91e2efb934ba",
      "new_mode": 33188,
      "new_path": "include/sound/timer.h"
    },
    {
      "type": "modify",
      "old_id": "161f3170bd7ea2cf414bbf166f8d8f66882eb793",
      "old_mode": 33188,
      "old_path": "sound/core/seq/seq_timer.c",
      "new_id": "63dc7bdb622df37ef1827121459bc9f9d4f78782",
      "new_mode": 33188,
      "new_path": "sound/core/seq/seq_timer.c"
    },
    {
      "type": "modify",
      "old_id": "c0a73913ec62b8c27cf712512bce2eafc26e2dbd",
      "old_mode": 33188,
      "old_path": "sound/core/timer.c",
      "new_id": "9091030f4a89e74178fdc43482030eb32eee8e26",
      "new_mode": 33188,
      "new_path": "sound/core/timer.c"
    }
  ]
}
