)]}'
{
  "commit": "3a4a255b84cc4371b9d1d16a22d2b9c628a41be5",
  "tree": "d84f0011cafa8b03c249cffda99ffcc77c16efdd",
  "parents": [
    "b882686d95ec79f789dbbcc717a98ec41867ea3a"
  ],
  "author": {
    "name": "Jiri Pirko",
    "email": "jiri@nvidia.com",
    "time": "Thu Jun 25 15:17:44 2026 +0200"
  },
  "committer": {
    "name": "Jiri Pirko",
    "email": "jiri@nvidia.com",
    "time": "Wed Jul 01 10:39:49 2026 +0200"
  },
  "message": "pyverbs: Remove MREx.close() override to fix deallocation crash\n\nMREx.close() called the base close() and then reset its own cdef object\nmember via \u0027self.dmah \u003d None\u0027. That assignment is both redundant and\nunsafe during deallocation.\n\nCython\u0027s generated subclass deallocator clears the subclass cdef object\nmembers (dmah) before chaining to the base deallocator that runs the\ninherited MR.__dealloc__ -\u003e self.close(). So when close() runs at\ndeallocation time, dmah is already NULL and \u0027self.dmah \u003d None\u0027 does an\nunguarded DECREF on NULL, segfaulting. This only stayed hidden while\nevery MREx was closed explicitly first (which sets self.mr \u003d NULL and\nmakes the deallocation-time close() skip its body); an MREx reclaimed by\nthe garbage collector crashes.\n\nReleasing dmah here is unnecessary: tp_dealloc already drops the\nreference, and MR.close() performs the ibv_dereg_mr(). Drop the override\nand inherit MR.close(), matching the other MR subclasses (e.g. DMMR)\nthat do not reset their extra members in close().\n\nSigned-off-by: Jiri Pirko \u003cjiri@nvidia.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "727c7abb47ea575ad63b45e2c181f37fdfc27ad5",
      "old_mode": 33188,
      "old_path": "pyverbs/mr.pyx",
      "new_id": "1921f70fabbe9d9d07553563d31b729e62430091",
      "new_mode": 33188,
      "new_path": "pyverbs/mr.pyx"
    }
  ]
}
