)]}'
{
  "commit": "89c220b93c06059f623e2d232bd54f49be1be22d",
  "tree": "e8ea4528b25c29d63576c1c75fb2ff729a6b225e",
  "parents": [
    "f183996eb77fd2d5662c62667298c292c943ebf5"
  ],
  "author": {
    "name": "Nathan Goldbaum",
    "email": "nathan.goldbaum@gmail.com",
    "time": "Mon Jul 21 21:25:43 2025"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Jul 21 21:25:43 2025"
  },
  "message": "gh-133296: Publicly expose critical section API that accepts PyMutex (gh-135899)\n\nThis makes the following APIs public:\n\n* `Py_BEGIN_CRITICAL_SECTION_MUTEX(mutex),`\n* `Py_BEGIN_CRITICAL_SECTION2_MUTEX(mutex1, mutex2)`\n* `void PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *mutex)`\n* `void PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *mutex1, PyMutex *mutex2)`\n\nThe macros are identical to the corresponding `Py_BEGIN_CRITICAL_SECTION` and\n`Py_BEGIN_CRITICAL_SECTION2` macros (e.g., they include braces), but they\naccept a `PyMutex` instead of an object.\n\nThe new macros are still paired with the existing END macros\n(`Py_END_CRITICAL_SECTION`, `Py_END_CRITICAL_SECTION2`).",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "409539dec17d73724ffa6097ce1e7c0fc103843c",
      "old_mode": 33188,
      "old_path": "Doc/c-api/init.rst",
      "new_id": "d35e905b2e72dfb9dc9f7aeb06dab5ca99467a50",
      "new_mode": 33188,
      "new_path": "Doc/c-api/init.rst"
    },
    {
      "type": "modify",
      "old_id": "35db3fb6a59ce66c23aa5efa948ef76a3f489d4d",
      "old_mode": 33188,
      "old_path": "Include/cpython/critical_section.h",
      "new_id": "4fc46fefb93a24a5f385a38f4cfe9b108263e209",
      "new_mode": 33188,
      "new_path": "Include/cpython/critical_section.h"
    },
    {
      "type": "modify",
      "old_id": "62460c5f8fad305b66985bb2952718c6e4b37c91",
      "old_mode": 33188,
      "old_path": "Include/internal/pycore_critical_section.h",
      "new_id": "2601de40737e85c36b05fd03ee691ac6fae22869",
      "new_mode": 33188,
      "new_path": "Include/internal/pycore_critical_section.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "41401911a6bc0bc77956096f4b1cdc5da62c6f90",
      "new_mode": 33188,
      "new_path": "Misc/NEWS.d/next/C_API/2025-06-24-11-10-01.gh-issue-133296.lIEuVJ.rst"
    },
    {
      "type": "modify",
      "old_id": "5b4f97d43b8721f196cc0fc8deb4ed56705ab0be",
      "old_mode": 33188,
      "old_path": "Modules/_ctypes/ctypes.h",
      "new_id": "9f995bf24080a5fd59d7923f5d0f952b84086f19",
      "new_mode": 33188,
      "new_path": "Modules/_ctypes/ctypes.h"
    },
    {
      "type": "modify",
      "old_id": "334f2a53041ca43b922994d73afe605eb8b0b945",
      "old_mode": 33188,
      "old_path": "Modules/_testcapimodule.c",
      "new_id": "d0c0b45c20cb36c49ada3a4e9c1b97aa7c5aca95",
      "new_mode": 33188,
      "new_path": "Modules/_testcapimodule.c"
    },
    {
      "type": "modify",
      "old_id": "379c4d0467c487d69ca5c43bde6943bb974e72d6",
      "old_mode": 33188,
      "old_path": "Objects/typeobject.c",
      "new_id": "d952a58d94af55b4095a29f79446233271c7ab0c",
      "new_mode": 33188,
      "new_path": "Objects/typeobject.c"
    },
    {
      "type": "modify",
      "old_id": "73857b85496316c61817a27b3b668e6df7c2d82c",
      "old_mode": 33188,
      "old_path": "Python/critical_section.c",
      "new_id": "e628ba2f6d19bcd9f09233bb1efe6e65b5b3652e",
      "new_mode": 33188,
      "new_path": "Python/critical_section.c"
    }
  ]
}
