)]}'
{
  "commit": "147ccf5e91fa272bdfb1de2f75e96de8ea5c943e",
  "tree": "34c0b27bbb7f96c24275a987f7bbc16164ecd76f",
  "parents": [
    "c1e3bcc354cef3cc270f652a42e8af8bda51b846",
    "352f67212ed5d4274178bd3cfc6fccc988d8d64b"
  ],
  "author": {
    "name": "Ha Thach",
    "email": "thach@tinyusb.org",
    "time": "Mon Sep 21 17:49:36 2026 +0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Sep 21 17:49:36 2026 +0700"
  },
  "message": "usbd: hold OUT endpoints with RX_PENDING until the buffer is consumed (#3937)\n\nXFER_COMPLETE cleared BUSY|CLAIMED before the class copied ep_buf, so another\ntask could claim and re-arm the endpoint into an unconsumed buffer (#1292).\nCompletion now sets RX_PENDING in the same store; claim() refuses it until the\nclass calls usbd_edpt_rx_consume() or re-arms with usbd_edpt_xfer(). Applies to\nevery build, not only OSAL_MUTEX_REQUIRED.\n\nAlso: mtp example supports FreeRTOS on ESP-IDF; test_ci_select reads sources as UTF-8.",
  "tree_diff": []
}
