)]}'
{
  "commit": "79c88a66516454475af40e0592e6ff0d746800b6",
  "tree": "7d0ba5fc446c4e174e7bbead2f4cae063d26e507",
  "parents": [
    "f415fa36ddb22786c2a6bbd472b9c4022d95e8bf"
  ],
  "author": {
    "name": "Roman Arutyunyan",
    "email": "arut@nginx.com",
    "time": "Wed Feb 04 16:22:43 2015 +0300"
  },
  "committer": {
    "name": "Roman Arutyunyan",
    "email": "arut@nginx.com",
    "time": "Wed Feb 04 16:22:43 2015 +0300"
  },
  "message": "Core: fixed a race resulting in extra sem_post()\u0027s.\n\nThe mtx-\u003ewait counter was not decremented if we were able to obtain the lock\nright after incrementing it.  This resulted in unneeded sem_post() calls,\neventually leading to EOVERFLOW errors being logged, \"sem_post() failed\nwhile wake shmtx (75: Value too large for defined data type)\".\n\nTo close the race, mtx-\u003ewait is now decremented if we obtain the lock right\nafter incrementing it in ngx_shmtx_lock().  The result can become -1 if a\nconcurrent ngx_shmtx_unlock() decrements mtx-\u003ewait before the added code does.\nHowever, that only leads to one extra iteration in the next call of\nngx_shmtx_lock().\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a62999f33937b63f4504d2adcd4a84dcf0b5bdbe",
      "old_mode": 33188,
      "old_path": "src/core/ngx_shmtx.c",
      "new_id": "6230dc060aac87970c930af822c6f52a3b23d6fe",
      "new_mode": 33188,
      "new_path": "src/core/ngx_shmtx.c"
    }
  ]
}
