)]}'
{
  "commit": "e9f69c10197f5ca3f834477952654d25c3ff5ecb",
  "tree": "4d1c6afd7a7216dd7b9ba3d89004ac1491222ce5",
  "parents": [
    "9f1b1b42cc59961d72ca467170a7476c6f825374"
  ],
  "author": {
    "name": "Roman Arutyunyan",
    "email": "arut@nginx.com",
    "time": "Wed Jun 14 20:13:41 2017 +0300"
  },
  "committer": {
    "name": "Roman Arutyunyan",
    "email": "arut@nginx.com",
    "time": "Wed Jun 14 20:13:41 2017 +0300"
  },
  "message": "Upstream: fixed running posted requests (ticket #788).\n\nPreviously, the upstream resolve handler always called\nngx_http_run_posted_requests() to run posted requests after processing the\nresolver response.  However, if the handler was called directly from the\nngx_resolve_name() function (for example, if the resolver response was cached),\nrunning posted requests from the handler could lead to the following errors:\n\n- If the request was scheduled for termination, it could actually be terminated\nin the resolve handler.  Upper stack frames could reference the freed request\nobject in this case.\n\n- If a significant number of requests were posted, and for each of them the\nresolve handler was called directly from the ngx_resolve_name() function,\nposted requests could be run recursively and lead to stack overflow.\n\nNow ngx_http_run_posted_requests() is only called from asynchronously invoked\nresolve handlers.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "324c59b7e3ea79c58d6b3200b9f09137da384848",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_upstream.c",
      "new_id": "8207608c78b3b25b88b4b176c3100797785784b2",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_upstream.c"
    }
  ]
}
