)]}'
{
  "commit": "c9d3edd2d77c09f5f25d2261a83f5a430db3b005",
  "tree": "141dc2b90ba684cb149d42f7f36c1930059a9013",
  "parents": [
    "49b323f18f7fe07d8743a5a81cd20474a508c2c1"
  ],
  "author": {
    "name": "Rich Lane",
    "email": "rlane@bigswitch.com",
    "time": "Wed Oct 09 00:21:01 2013 -0700"
  },
  "committer": {
    "name": "Rich Lane",
    "email": "rlane@bigswitch.com",
    "time": "Wed Oct 09 00:21:01 2013 -0700"
  },
  "message": "controller: serialize calls to socket.sendall\n\nThe sendall method is not atomic. Concurrent calls may end up with their data\ninterleaved on the socket. This is especially likely when the socket buffer\nfills up, causing sendall to call select(2) between writes.\n\nI noticed this bug when installing many flows. The echo reply sent by the\ncontroller thread ended up in the middle of a flow mod.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b23eefa841d5e11c795cc588bf993fac66328700",
      "old_mode": 33188,
      "old_path": "src/python/oftest/controller.py",
      "new_id": "1d911bc7acc33968cfb83c376285eda4094f983b",
      "new_mode": 33188,
      "new_path": "src/python/oftest/controller.py"
    }
  ]
}
