)]}'
{
  "commit": "d161231abf18b45c60436f2f221fe01890d0e0bf",
  "tree": "a26a95bdb97e61c0832d893a1dc037741ccb475a",
  "parents": [
    "e83c2aa81dba9a1a9f66a4d27b7b7183143e2b0a"
  ],
  "author": {
    "name": "Maxim Dounin",
    "email": "mdounin@mdounin.ru",
    "time": "Mon Dec 27 19:48:33 2021 +0300"
  },
  "committer": {
    "name": "Maxim Dounin",
    "email": "mdounin@mdounin.ru",
    "time": "Mon Dec 27 19:48:33 2021 +0300"
  },
  "message": "Simplified sendfile(SF_NODISKIO) usage.\n\nStarting with FreeBSD 11, there is no need to use AIO operations to preload\ndata into cache for sendfile(SF_NODISKIO) to work.  Instead, sendfile()\nhandles non-blocking loading data from disk by itself.  It still can, however,\nreturn EBUSY if a page is already being loaded (for example, by a different\nprocess).  If this happens, we now post an event for the next event loop\niteration, so sendfile() is retried \"after a short period\", as manpage\nrecommends.\n\nThe limit of the number of EBUSY tolerated without any progress is preserved,\nbut now it does not result in an alert, since on an idle system event loop\niteration might be very short and EBUSY can happen many times in a row.\nInstead, SF_NODISKIO is simply disabled for one call once the limit is\nreached.\n\nWith this change, sendfile(SF_NODISKIO) is now used automatically as long as\nsendfile() is enabled, and no longer requires \"aio on;\".\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "937ca204e6d0ce7679ea2a71289a5e1e450e922f",
      "old_mode": 33188,
      "old_path": "auto/os/freebsd",
      "new_id": "870bac4b3e6fdf87502731b2af255476f08906bf",
      "new_mode": 33188,
      "new_path": "auto/os/freebsd"
    },
    {
      "type": "modify",
      "old_id": "4b665629c7f3ce9c911147e76d38e8e90861dded",
      "old_mode": 33188,
      "old_path": "src/core/ngx_buf.h",
      "new_id": "fdcd0cddf68637a75e432e3872f4e16a111807bf",
      "new_mode": 33188,
      "new_path": "src/core/ngx_buf.h"
    },
    {
      "type": "modify",
      "old_id": "4716da492e90bcaf54a4ddb79e95bfd9b1253f93",
      "old_mode": 33188,
      "old_path": "src/core/ngx_connection.h",
      "new_id": "8cc14755ad46cbc82a1bf5464c043c2baa6c9ee2",
      "new_mode": 33188,
      "new_path": "src/core/ngx_connection.h"
    },
    {
      "type": "modify",
      "old_id": "8cf3210e8eacbabf826cb2a49ed0a68d2bec537a",
      "old_mode": 33188,
      "old_path": "src/core/ngx_module.h",
      "new_id": "6fb455426b3bbdc796e2921127b85a746e700f47",
      "new_mode": 33188,
      "new_path": "src/core/ngx_module.h"
    },
    {
      "type": "modify",
      "old_id": "fd4603b1973fb7ac7117553c7a9a3e897898eee0",
      "old_mode": 33188,
      "old_path": "src/core/ngx_output_chain.c",
      "new_id": "41267eefff2bd7d3ee1c82696a81027455a805bb",
      "new_mode": 33188,
      "new_path": "src/core/ngx_output_chain.c"
    },
    {
      "type": "modify",
      "old_id": "97f9673c90dac71c00ab75a08108438b3cd4febd",
      "old_mode": 33188,
      "old_path": "src/event/ngx_event.h",
      "new_id": "51b8361321a70c5acd567c85c75ca75ef0c16868",
      "new_mode": 33188,
      "new_path": "src/event/ngx_event.h"
    },
    {
      "type": "modify",
      "old_id": "b47e4afa750838dd023fb7429256f5f1ab567be8",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_copy_filter_module.c",
      "new_id": "bd3028bc76817a1106de8e4fce47485516ffc2c6",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_copy_filter_module.c"
    },
    {
      "type": "modify",
      "old_id": "750c12fc3538306c896ac16de8ffb8fbc13b794b",
      "old_mode": 33188,
      "old_path": "src/os/unix/ngx_freebsd_sendfile_chain.c",
      "new_id": "c939f6ad62e143ac9f87b3de552e16b5d96216d6",
      "new_mode": 33188,
      "new_path": "src/os/unix/ngx_freebsd_sendfile_chain.c"
    }
  ]
}
