)]}'
{
  "commit": "a02adc859f84d33e9e2eba81b93899a725437785",
  "tree": "0944308c4fe671172ff9260251ecc1fbec1e9dc2",
  "parents": [
    "72a0adef89a5666388dc3f349dbd6f9ba64d24cc"
  ],
  "author": {
    "name": "Marcus Ball",
    "email": "marcus.ball@live.com",
    "time": "Mon May 30 02:38:07 2022 +0300"
  },
  "committer": {
    "name": "Marcus Ball",
    "email": "marcus.ball@live.com",
    "time": "Mon May 30 02:38:07 2022 +0300"
  },
  "message": "Fixed runtime handling of systems without EPOLLRDHUP support.\n\nIn 7583:efd71d49bde0 (nginx 1.17.5) along with introduction of the\nioctl(FIONREAD) support proper handling of systems without EPOLLRDHUP\nsupport in the kernel (but with EPOLLRDHUP in headers) was broken.\n\nBefore the change, rev-\u003eavailable was never set to 0 unless\nngx_use_epoll_rdhup was also set (that is, runtime test for EPOLLRDHUP\nintroduced in 6536:f7849bfb6d21 succeeded).  After the change,\nrev-\u003eavailable might reach 0 on systems without runtime EPOLLRDHUP\nsupport, stopping further reading in ngx_readv_chain() and ngx_unix_recv().\nAnd, if EOF happened to be already reported along with the last event,\nit is not reported again by epoll_wait(), leading to connection hangs\nand timeouts on such systems.\n\nThis affects Linux kernels before 2.6.17 if nginx was compiled\nwith newer headers, and, more importantly, emulation layers, such as\nDigitalOcean\u0027s App Platform\u0027s / gVisor\u0027s epoll emulation layer.\n\nFix is to explicitly check ngx_use_epoll_rdhup before the corresponding\nrev-\u003epending_eof tests in ngx_readv_chain() and ngx_unix_recv().\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b1ae4b51d2e40a342ca6223fb1d004838f515530",
      "old_mode": 33188,
      "old_path": "src/os/unix/ngx_readv_chain.c",
      "new_id": "370a4011f88f8be8246284c236991425efb453d0",
      "new_mode": 33188,
      "new_path": "src/os/unix/ngx_readv_chain.c"
    },
    {
      "type": "modify",
      "old_id": "ddfae4dbee66069043bb7149d6686889a3b2ef1e",
      "old_mode": 33188,
      "old_path": "src/os/unix/ngx_recv.c",
      "new_id": "cc04a5fbb10430675997626fdde88eded1c7da4d",
      "new_mode": 33188,
      "new_path": "src/os/unix/ngx_recv.c"
    }
  ]
}
