)]}'
{
  "commit": "f582340a6a48588aa50da17e1620e8f91b146941",
  "tree": "d30c0ffb648b7a43ff469f89f05850f5008482ec",
  "parents": [
    "72f9a5c374bf559e9c69a62c1d95304f913ef6b2"
  ],
  "author": {
    "name": "Kenny Root",
    "email": "kroot@google.com",
    "time": "Sat Feb 12 07:13:44 2011 -0800"
  },
  "committer": {
    "name": "Kenny Root",
    "email": "kroot@google.com",
    "time": "Mon Feb 14 09:32:56 2011 -0800"
  },
  "message": "Fix the handle locking in stdio\n\nFix the handle locking in stdio to use flockfile/funlockfile\ninternally when and where required.  Macros in \u003cstdio.h\u003e are updated\nto automatically call the underlying functions when the process is\nthreaded to obtain the necessary locking.  A private mutex is added\nto protect __sglue, the internal list of FILE handles, and another\nto protect the one-time initialization.  Some routines in libc that\nuse getc() change to use getc_unlocked() as they\u0027re either protected\nby their own lock or aren\u0027t thread-safe routines anyway.\n\nBased on OpenBSD change by guenther@openbsd.org\nhttp://www.mail-archive.com/source-changes@cvs.openbsd.org/msg01015.html\n\nBug: 3446659\nChange-Id: Ie82116e358c541718d6709ec45ca6796be5a007b\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c38ed5a5164206039dfe85c4bb14eeb9afe748db",
      "old_mode": 33188,
      "old_path": "libc/include/stdio.h",
      "new_id": "4006882b92d62247b6b1b55fcc0a2ecb31b0bc53",
      "new_mode": 33188,
      "new_path": "libc/include/stdio.h"
    },
    {
      "type": "modify",
      "old_id": "1257c7f249f177b7f4418e433352156e4d132369",
      "old_mode": 33188,
      "old_path": "libc/stdio/asprintf.c",
      "new_id": "c3d8d61ff3c557ac69d159bb6ea5ef6fb120e195",
      "new_mode": 33188,
      "new_path": "libc/stdio/asprintf.c"
    },
    {
      "type": "modify",
      "old_id": "20f199451931392355936d0440153e66a4f555d5",
      "old_mode": 33188,
      "old_path": "libc/stdio/clrerr.c",
      "new_id": "cb6c4df1fa9e5d15da4c15ec63a12191ff63cce7",
      "new_mode": 33188,
      "new_path": "libc/stdio/clrerr.c"
    },
    {
      "type": "modify",
      "old_id": "e94292baba90f81ff538db2435a5b71a364ef6ac",
      "old_mode": 33188,
      "old_path": "libc/stdio/fclose.c",
      "new_id": "8c3bac47e35127c4fee6514ddf82ed0922f14bf9",
      "new_mode": 33188,
      "new_path": "libc/stdio/fclose.c"
    },
    {
      "type": "modify",
      "old_id": "eb742da7efdac6351a910e778afaf01466fc0f35",
      "old_mode": 33188,
      "old_path": "libc/stdio/feof.c",
      "new_id": "0fa65b0f89602ef642e4fea81157e10cf5f4f4f3",
      "new_mode": 33188,
      "new_path": "libc/stdio/feof.c"
    },
    {
      "type": "modify",
      "old_id": "3f72ad8d99b28c40798c78a44328e0d976c56c8d",
      "old_mode": 33188,
      "old_path": "libc/stdio/fflush.c",
      "new_id": "e69bdcc77f86407cad5eec18ce145f23cd9396bb",
      "new_mode": 33188,
      "new_path": "libc/stdio/fflush.c"
    },
    {
      "type": "modify",
      "old_id": "53e2948813e406c08a95ef268ed928aa6f73dd34",
      "old_mode": 33188,
      "old_path": "libc/stdio/fgetc.c",
      "new_id": "0a6d54eec19c744e91932efdc8e814cc09e8e536",
      "new_mode": 33188,
      "new_path": "libc/stdio/fgetc.c"
    },
    {
      "type": "modify",
      "old_id": "95a5b31d9e90168eba230b9bf4781ff5529c9133",
      "old_mode": 33188,
      "old_path": "libc/stdio/fgetln.c",
      "new_id": "0947dd8527ec1e6fd8c39c4320b615cfccd161ee",
      "new_mode": 33188,
      "new_path": "libc/stdio/fgetln.c"
    },
    {
      "type": "modify",
      "old_id": "f26385d6a83b67313ee3863e947577922411e5cb",
      "old_mode": 33188,
      "old_path": "libc/stdio/fgets.c",
      "new_id": "311b7b2904c0c2a2ec3914cccaf19990fa588c63",
      "new_mode": 33188,
      "new_path": "libc/stdio/fgets.c"
    },
    {
      "type": "modify",
      "old_id": "0fd985b23e7851b4458c88577c7d39d38d363099",
      "old_mode": 33188,
      "old_path": "libc/stdio/fileno.c",
      "new_id": "cbefdeb7e8e2c5f9e554d02ba842a1a526983b40",
      "new_mode": 33188,
      "new_path": "libc/stdio/fileno.c"
    },
    {
      "type": "modify",
      "old_id": "1d0f9c5d85ecd6bcf6aba01b367d5bb2965641e8",
      "old_mode": 33188,
      "old_path": "libc/stdio/findfp.c",
      "new_id": "a659c871cac1802e335235f33700710ea96cd75a",
      "new_mode": 33188,
      "new_path": "libc/stdio/findfp.c"
    },
    {
      "type": "modify",
      "old_id": "fa0213ac7b76a62ffc5fd380b708ec579497c446",
      "old_mode": 33188,
      "old_path": "libc/stdio/fpurge.c",
      "new_id": "e04c4fefc6f17bcd46670fc9ec1cdaf536422c38",
      "new_mode": 33188,
      "new_path": "libc/stdio/fpurge.c"
    },
    {
      "type": "modify",
      "old_id": "2a6e7b7456f06ec859b1c6c95d6571a0338626fe",
      "old_mode": 33188,
      "old_path": "libc/stdio/fputc.c",
      "new_id": "90809e2342319d17ccf8ad9779d8c0c1919e87d5",
      "new_mode": 33188,
      "new_path": "libc/stdio/fputc.c"
    },
    {
      "type": "modify",
      "old_id": "7434ca86d6407ccff5aadb800ebf02690339bc82",
      "old_mode": 33188,
      "old_path": "libc/stdio/fputs.c",
      "new_id": "c2462ba6b1a011d17caea1f806ec5b5dae6b6a95",
      "new_mode": 33188,
      "new_path": "libc/stdio/fputs.c"
    },
    {
      "type": "modify",
      "old_id": "69c40b3e7cb87b9e30a9f487a97ac645575ae414",
      "old_mode": 33188,
      "old_path": "libc/stdio/fread.c",
      "new_id": "649db17b94f9a9fe19d10139796472bc17036856",
      "new_mode": 33188,
      "new_path": "libc/stdio/fread.c"
    },
    {
      "type": "modify",
      "old_id": "59b22286434f70f6b4fa081756bd068758b2bacb",
      "old_mode": 33188,
      "old_path": "libc/stdio/freopen.c",
      "new_id": "da3a674c92d0cf491aaae13858fa03e016375454",
      "new_mode": 33188,
      "new_path": "libc/stdio/freopen.c"
    },
    {
      "type": "modify",
      "old_id": "8581b62fcfcab53b2e97504581e9bdd13a58f060",
      "old_mode": 33188,
      "old_path": "libc/stdio/fseek.c",
      "new_id": "38697f53f53b46d9029cb22d9103c54dca64911d",
      "new_mode": 33188,
      "new_path": "libc/stdio/fseek.c"
    },
    {
      "type": "modify",
      "old_id": "b7d449e187d19472cdad137aef933559a96959a7",
      "old_mode": 33188,
      "old_path": "libc/stdio/ftell.c",
      "new_id": "9f850ee859388a2c346681bf0caa6f7658b9bff8",
      "new_mode": 33188,
      "new_path": "libc/stdio/ftell.c"
    },
    {
      "type": "modify",
      "old_id": "5606cf1e002cd8c05e8aa12a7255b7eb1168b3f8",
      "old_mode": 33188,
      "old_path": "libc/stdio/fwalk.c",
      "new_id": "b1df891858f7d40cf24ad6d46ba861977b1f6245",
      "new_mode": 33188,
      "new_path": "libc/stdio/fwalk.c"
    },
    {
      "type": "modify",
      "old_id": "8a508dcdba7c373d899e409b277b7e0c0f96b471",
      "old_mode": 33188,
      "old_path": "libc/stdio/fwrite.c",
      "new_id": "a97313ead9062eec188919a5f916deb0b9c3dd5c",
      "new_mode": 33188,
      "new_path": "libc/stdio/fwrite.c"
    },
    {
      "type": "modify",
      "old_id": "cdd572215bd18fc076f6e18af160f6956309ac0e",
      "old_mode": 33188,
      "old_path": "libc/stdio/getc.c",
      "new_id": "16a5b1d57b76df14155ac4aa9c18ccada440f97b",
      "new_mode": 33188,
      "new_path": "libc/stdio/getc.c"
    },
    {
      "type": "modify",
      "old_id": "004eb99f4878298be64cc6fffe40ee16783efbb5",
      "old_mode": 33188,
      "old_path": "libc/stdio/gets.c",
      "new_id": "93e2edd12fc388423a359812b74aa6c94adaeb13",
      "new_mode": 33188,
      "new_path": "libc/stdio/gets.c"
    },
    {
      "type": "modify",
      "old_id": "3db1fc5ef8b084430e00f1ca9bab7b0bd2528925",
      "old_mode": 33188,
      "old_path": "libc/stdio/local.h",
      "new_id": "6b2111a2bf2a9f9b54ca1eb1e8d4358c9fb0ad27",
      "new_mode": 33188,
      "new_path": "libc/stdio/local.h"
    },
    {
      "type": "modify",
      "old_id": "925021549fbdf03d1f1f1805ec9d0f4b1aa6842a",
      "old_mode": 33188,
      "old_path": "libc/stdio/putc.c",
      "new_id": "2b055046678a2438f3d9afd3bd4439d51f1e4a05",
      "new_mode": 33188,
      "new_path": "libc/stdio/putc.c"
    },
    {
      "type": "modify",
      "old_id": "c6ecc24f1a8ef1c5f40e8c8d0b33370eb1e91aca",
      "old_mode": 33188,
      "old_path": "libc/stdio/puts.c",
      "new_id": "4603a3dd8beb1207ba0f14c56488e36eb5ef577f",
      "new_mode": 33188,
      "new_path": "libc/stdio/puts.c"
    },
    {
      "type": "modify",
      "old_id": "74b378e1488c72ab4d19e1a17d1012d38303cd57",
      "old_mode": 33188,
      "old_path": "libc/stdio/refill.c",
      "new_id": "7cb6b7892392a82873c0c7f23d6d8a4491b5a9c1",
      "new_mode": 33188,
      "new_path": "libc/stdio/refill.c"
    },
    {
      "type": "modify",
      "old_id": "9b92bf08113e89b8b6f2d5da96303fb8bc3585f0",
      "old_mode": 33188,
      "old_path": "libc/stdio/setvbuf.c",
      "new_id": "2fb76afa133763a3c194cfeeacafe01fc056b54c",
      "new_mode": 33188,
      "new_path": "libc/stdio/setvbuf.c"
    },
    {
      "type": "modify",
      "old_id": "45ef7eb676a701e00cb5d0abb32edac584e60ca0",
      "old_mode": 33188,
      "old_path": "libc/stdio/snprintf.c",
      "new_id": "5aa54be43478af1ef924c8f3d24be4b84be578fd",
      "new_mode": 33188,
      "new_path": "libc/stdio/snprintf.c"
    },
    {
      "type": "modify",
      "old_id": "67f924b27e86dc01b57462a09d1d6835c768ead1",
      "old_mode": 33188,
      "old_path": "libc/stdio/sprintf.c",
      "new_id": "3cf795224c229c1740dc80c90963fc53486bb81e",
      "new_mode": 33188,
      "new_path": "libc/stdio/sprintf.c"
    },
    {
      "type": "modify",
      "old_id": "fe05258a84e82faca5ecd1ff337bce672c6286d8",
      "old_mode": 33188,
      "old_path": "libc/stdio/ungetc.c",
      "new_id": "b493d21be8dba7a6b35a9a28e97206708b19fb3e",
      "new_mode": 33188,
      "new_path": "libc/stdio/ungetc.c"
    },
    {
      "type": "modify",
      "old_id": "54c46b3db78dc24eb677aea9d219c91b5d1f18db",
      "old_mode": 33188,
      "old_path": "libc/stdio/vasprintf.c",
      "new_id": "1630ccbd0df13b70d737e8ef31713db1a0fc0f17",
      "new_mode": 33188,
      "new_path": "libc/stdio/vasprintf.c"
    },
    {
      "type": "modify",
      "old_id": "9c36b79e0f1cba4d1ea41ae34a31689c56849961",
      "old_mode": 33188,
      "old_path": "libc/stdio/vfprintf.c",
      "new_id": "dac8496ca0014cc815d2d7c7e1d80c53e6af4ef3",
      "new_mode": 33188,
      "new_path": "libc/stdio/vfprintf.c"
    },
    {
      "type": "modify",
      "old_id": "dbd0a8b09d41a346178c2d05784bf2be8a36ec42",
      "old_mode": 33188,
      "old_path": "libc/stdio/vfscanf.c",
      "new_id": "b16e3c711bc0885ad0214faabcae4de2ec03c72b",
      "new_mode": 33188,
      "new_path": "libc/stdio/vfscanf.c"
    },
    {
      "type": "modify",
      "old_id": "e6dd009d1063b2a56843e5d4746d6578ead931e4",
      "old_mode": 33188,
      "old_path": "libc/stdio/vsnprintf.c",
      "new_id": "ca30f94012eead46adb2e3161e0f31149018746a",
      "new_mode": 33188,
      "new_path": "libc/stdio/vsnprintf.c"
    },
    {
      "type": "modify",
      "old_id": "67a53a1bd5d319af38e7b694141ed95e728f50fd",
      "old_mode": 33188,
      "old_path": "libc/stdio/vsprintf.c",
      "new_id": "846ee8a902007545681d142719440889c35baf24",
      "new_mode": 33188,
      "new_path": "libc/stdio/vsprintf.c"
    },
    {
      "type": "modify",
      "old_id": "c757799d47c8e40d12d953a3716e5849c9e05e47",
      "old_mode": 33188,
      "old_path": "libc/stdio/wbuf.c",
      "new_id": "e09ac594ed2f001fb1f17ab6d0c6074f564126ca",
      "new_mode": 33188,
      "new_path": "libc/stdio/wbuf.c"
    }
  ]
}
