)]}'
{
  "commit": "c65c9bc3efa5589f691276bb9db689119a711222",
  "tree": "ccb86ffb28ecafa77623fb2789faae8e4c1e2c4b",
  "parents": [
    "e8b70e7d3e86319a8b2aaabde3866833d92cd80f"
  ],
  "author": {
    "name": "Alan Cox",
    "email": "alan@linux.intel.com",
    "time": "Thu Jun 11 12:50:12 2009 +0100"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Thu Jun 11 08:51:01 2009 -0700"
  },
  "message": "tty: rewrite the ldisc locking\n\nThere are several pretty much unfixable races in the old ldisc code, especially\nwith respect to pty behaviour and also to hangup. It\u0027s easier to rewrite the\ncode than simply try and patch it up.\n\nThis patch\n- splits the ldisc from the tty (so we will be able to refcount it more cleanly\n  later)\n- introduces a mutex lock for ldisc changing on an active device\n- fixes the complete mess that hangup caused\n- implements hopefully correct setldisc/close/hangup locking\n\nThere are still some problems around pty pairs that have always been there but\nat least it is now possible to understand the code and fix further problems.\n\nThis fixes the following known bugs\n- hang up can leak ldisc references\n- hang up may not call open/close on ldisc in a matched way\n- pty/tty pairs can deadlock during an ldisc change\n- reading the ldisc proc files can cause every ldisc to be loaded\n\nand probably a few other of the mysterious ldisc race reports.\n\nI\u0027m sure it also adds the odd new one.\n\nSigned-off-by: Alan Cox \u003calan@linux.intel.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "af761dc434f638e9ab869a8e8d8508a98adbd175",
      "old_mode": 33188,
      "old_path": "drivers/bluetooth/hci_ldisc.c",
      "new_id": "688015128594acbeeda9ade8ce5f8a37c239275f",
      "new_mode": 33188,
      "new_path": "drivers/bluetooth/hci_ldisc.c"
    },
    {
      "type": "modify",
      "old_id": "4560190517422247a223d1fc25b0c6dd2b2b9e17",
      "old_mode": 33188,
      "old_path": "drivers/char/cyclades.c",
      "new_id": "f3366d3f06cfe404cdfe94b6d3393c55b7b05886",
      "new_mode": 33188,
      "new_path": "drivers/char/cyclades.c"
    },
    {
      "type": "modify",
      "old_id": "710ee9333057807230c5da094e0c9301de82aa65",
      "old_mode": 33188,
      "old_path": "drivers/char/epca.c",
      "new_id": "abef1f7d84fefb03ef23ffc90417d173aea7ceef",
      "new_mode": 33188,
      "new_path": "drivers/char/epca.c"
    },
    {
      "type": "modify",
      "old_id": "0061e18aff6045624e6fad0eaaa804f8f9d951e2",
      "old_mode": 33188,
      "old_path": "drivers/char/ip2/i2lib.c",
      "new_id": "0d10b89218ed1da1818f47c643705f99d9dd3b55",
      "new_mode": 33188,
      "new_path": "drivers/char/ip2/i2lib.c"
    },
    {
      "type": "modify",
      "old_id": "afd9247cf082d15e2cb6f1e8273c72fba9317ba5",
      "old_mode": 33188,
      "old_path": "drivers/char/ip2/ip2main.c",
      "new_id": "517271c762e6b620b1323da302c5cd837985c626",
      "new_mode": 33188,
      "new_path": "drivers/char/ip2/ip2main.c"
    },
    {
      "type": "modify",
      "old_id": "bacb3e2872ae49cbc5668e6a402cb50fbf75a30b",
      "old_mode": 33188,
      "old_path": "drivers/char/n_hdlc.c",
      "new_id": "461ece591a5bf98fbc0f979e03d75ac8f9cc6234",
      "new_mode": 33188,
      "new_path": "drivers/char/n_hdlc.c"
    },
    {
      "type": "modify",
      "old_id": "da2cb8c70c110d1c4bb2bb87cf446ab4d69f652c",
      "old_mode": 33188,
      "old_path": "drivers/char/pty.c",
      "new_id": "5acd29e6e0430ee6bc16f3b4757a4fc76eb5cc06",
      "new_mode": 33188,
      "new_path": "drivers/char/pty.c"
    },
    {
      "type": "modify",
      "old_id": "cb8ca5698963017d03ff6ed625ec41f0d0a6c062",
      "old_mode": 33188,
      "old_path": "drivers/char/selection.c",
      "new_id": "f97b9e8480645f85c34efb7bcbb41b3474e34d6c",
      "new_mode": 33188,
      "new_path": "drivers/char/selection.c"
    },
    {
      "type": "modify",
      "old_id": "be49d0730bb99b41b5e400ddb1c1454b800a2100",
      "old_mode": 33188,
      "old_path": "drivers/char/tty_io.c",
      "new_id": "2f44b0b241c3a8f8a8f5ad2272d22887c6f91d5a",
      "new_mode": 33188,
      "new_path": "drivers/char/tty_io.c"
    },
    {
      "type": "modify",
      "old_id": "e3c6416aa86db4ba6b89860b2617b3f4f5e92f01",
      "old_mode": 33188,
      "old_path": "drivers/char/tty_ldisc.c",
      "new_id": "a58a19a6a5e102b52c60ea1000086b90640ed21d",
      "new_mode": 33188,
      "new_path": "drivers/char/tty_ldisc.c"
    },
    {
      "type": "modify",
      "old_id": "f9c13c83790c03ddf0703dec5c505ee7811e9def",
      "old_mode": 33188,
      "old_path": "include/linux/tty.h",
      "new_id": "1488d8c81aac6587c9edc8002f39f89d104391cf",
      "new_mode": 33188,
      "new_path": "include/linux/tty.h"
    }
  ]
}
