)]}'
{
  "commit": "5e962753812883e3698aaf3856770bf5b12394b3",
  "tree": "8938439622b2ce9cfecbef9a06b62fdbb9167faa",
  "parents": [
    "53347cfe52b994bafda672ff3ff6e35e4e7aa464"
  ],
  "author": {
    "name": "Kevin Klues",
    "email": "klueska@cs.berkeley.edu",
    "time": "Fri Jan 31 14:00:35 2014 -0800"
  },
  "committer": {
    "name": "Kevin Klues",
    "email": "klueska@cs.berkeley.edu",
    "time": "Fri Jan 31 14:12:30 2014 -0800"
  },
  "message": "Update pthread futex_waiti() to unlock after yield\n\nThe previous version of the futex code was adopted from the linux parlib\ncode, which doesn\u0027t have to worry about uthreads spuriously dropping\ninto vcore context while not holding a pdr lock.  Without this change,\nit was possible for a vcore to spin indefinitely on a futex_wait() while\nthe uthread it was trying to wake had not actually yielded yet (and\ncouldn\u0027t because it was trying to yield on the very same vcore that was\nspinning trying to wake it).\n\nWith this change we now have to hold the futex lock a little longer, but\nit is necessary for correctness.  In the future, we will probably want\nto use some sort of hashtable to maintain one lock per futex, rather\nthan a global futex lock, and this will help alleviate some of these\ncosts.\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "15070e0096e73e03a8acc0128ce8e01adce6504a",
      "new_mode": 33188,
      "new_path": "tests/signal_futex.c"
    },
    {
      "type": "modify",
      "old_id": "1cf3bb13437f1dddcfdca54c1351b4c3d9f25c03",
      "old_mode": 33188,
      "old_path": "user/pthread/futex.c",
      "new_id": "936ce9fca1f796f240ecfc1540fa5fd163d956a2",
      "new_mode": 33188,
      "new_path": "user/pthread/futex.c"
    }
  ]
}
