)]}'
{
  "commit": "1185b5b79a12ba67eb60bee3f75babf7a222fde0",
  "tree": "8bec5accb1289ea191ae245815adcbd6e7f0df8d",
  "parents": [
    "c6d6a048f5a6f422e470c7c4bdb21a0c59d7c8fd"
  ],
  "author": {
    "name": "Tom Tromey",
    "email": "tom@tromey.com",
    "time": "Tue Sep 05 19:05:40 2023 -0600"
  },
  "committer": {
    "name": "Tom Tromey",
    "email": "tom@tromey.com",
    "time": "Tue Nov 07 17:47:16 2023 -0700"
  },
  "message": "Add minimal thread-safety to BFD\n\nThis patch provides some minimal thread-safety to BFD.\n\nThe BFD client can request thread-safety by providing a lock and\nunlock function.  The globals used during BFD creation (e.g.,\nbfd_id_counter) are then locked, and the file descriptor cache is also\nlocked.  A function to clean up any thread-local data is now provided\nfor BFD clients.\n\n\t* bfd-in2.h: Regenerate.\n\t* bfd.c (lock_fn, unlock_fn): New globals.\n\t(bfd_thread_init, bfd_thread_cleanup, bfd_lock, bfd_unlock): New\n\tfunctions.\n\t* cache.c (bfd_cache_lookup_worker): Use _bfd_open_file_unlocked.\n\t(cache_btell, cache_bseek, cache_bread, cache_bwrite): Lock\n\tand unlock.\n\t(cache_bclose): Add comment.\n\t(cache_bflush, cache_bstat, cache_bmmap): Lock and unlock.\n\t(_bfd_cache_init_unlocked): New function.\n\t(bfd_cache_init): Use it.  Lock and unlock.\n\t(_bfd_cache_close_unlocked): New function.\n\t(bfd_cache_close, bfd_cache_close_all): Use it.  Lock and unlock.\n\t(_bfd_open_file_unlocked): New function.\n\t(bfd_open_file): Use it.  Lock and unlock.\n\t* doc/bfd.texi (BFD front end): Add Threading menu item.\n\t* libbfd.h: Regenerate.\n\t* opncls.c (_bfd_new_bfd): Lock and unlock.\n\t* po/bfd.pot: Regenerate.\n\n\n\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "96eef92fdc73b60235241cd06ed59ebad605b30c",
      "old_mode": 33188,
      "old_path": "bfd/bfd-in2.h",
      "new_id": "79f7f24436c306c148a006705980de4616d279e9",
      "new_mode": 33188,
      "new_path": "bfd/bfd-in2.h"
    },
    {
      "type": "modify",
      "old_id": "2cf8361caa2215dff574b5a1f0e3aa12f83cec85",
      "old_mode": 33188,
      "old_path": "bfd/bfd.c",
      "new_id": "99189e0b5ac371751fe9f683b149cc9cbd685295",
      "new_mode": 33188,
      "new_path": "bfd/bfd.c"
    },
    {
      "type": "modify",
      "old_id": "3d26bee077371c32abb959bd52e2be0806bdffc1",
      "old_mode": 33188,
      "old_path": "bfd/cache.c",
      "new_id": "a392bd28e18cbc7b260178544199b9f374819443",
      "new_mode": 33188,
      "new_path": "bfd/cache.c"
    },
    {
      "type": "modify",
      "old_id": "f348710845f557afb1759bf7f1946e545707d309",
      "old_mode": 33188,
      "old_path": "bfd/doc/bfd.texi",
      "new_id": "3f70cb73a1dab48d9fcf40a40288c6498bcfc18e",
      "new_mode": 33188,
      "new_path": "bfd/doc/bfd.texi"
    },
    {
      "type": "modify",
      "old_id": "498ce8d95b5769374ac305e457cc2c905ee43135",
      "old_mode": 33188,
      "old_path": "bfd/libbfd.h",
      "new_id": "cc432677a811bbc965ddbc74679af63dd40f753d",
      "new_mode": 33188,
      "new_path": "bfd/libbfd.h"
    },
    {
      "type": "modify",
      "old_id": "cddfd7ec1fb4f8d579490b325caa034db32d05f7",
      "old_mode": 33188,
      "old_path": "bfd/opncls.c",
      "new_id": "5a77562744c77260fbff3c466fda91fc4755fa62",
      "new_mode": 33188,
      "new_path": "bfd/opncls.c"
    },
    {
      "type": "modify",
      "old_id": "6c979791ef704be800ebaaf523958e2fc25f3930",
      "old_mode": 33188,
      "old_path": "bfd/po/bfd.pot",
      "new_id": "bc428dad3b2ffb9f15b79691ea864845a2812ab8",
      "new_mode": 33188,
      "new_path": "bfd/po/bfd.pot"
    }
  ]
}
