{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":3287591,"defaultBranch":"master","name":"lwan","ownerLogin":"lpereira","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2012-01-28T00:48:12.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/15001?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1708886082.0","currentOid":""},"activityList":{"items":[{"before":"f8b41ed1c5214061549cb16b98f9d60a6efa83e0","after":"53423117c49700783cca214ae3827d74db6f4386","ref":"refs/heads/master","pushedAt":"2024-05-10T06:41:46.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Self-test lwan_char_isspace() too, using memchr()","shortMessageHtmlLink":"Self-test lwan_char_isspace() too, using memchr()"}},{"before":"9b3bdf531e6c8b6ff211f90e75c3a2c90d146c79","after":"f8b41ed1c5214061549cb16b98f9d60a6efa83e0","ref":"refs/heads/master","pushedAt":"2024-05-10T02:39:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Avoid a mod in the status lookup perfect hash table","shortMessageHtmlLink":"Avoid a mod in the status lookup perfect hash table"}},{"before":"0289a1f42b28db61a2f6d8f4b4da563c0ac9cba8","after":"9b3bdf531e6c8b6ff211f90e75c3a2c90d146c79","ref":"refs/heads/master","pushedAt":"2024-05-10T01:19:18.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Set TCP_NODELAY in all the listening sockets\n\nMaybe this should help latency a bit? I don't have my testing setup\nanymore, so, eh.","shortMessageHtmlLink":"Set TCP_NODELAY in all the listening sockets"}},{"before":"c26a6bafea9cc47b887233c13e2ddb44b363e126","after":"0289a1f42b28db61a2f6d8f4b4da563c0ac9cba8","ref":"refs/heads/master","pushedAt":"2024-05-09T05:53:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Fix mask loading websocket unmasking function (SSE3 path)","shortMessageHtmlLink":"Fix mask loading websocket unmasking function (SSE3 path)"}},{"before":"c26a3985690466a91d7cdd6ca1f26652f1a2d2f8","after":"c26a6bafea9cc47b887233c13e2ddb44b363e126","ref":"refs/heads/master","pushedAt":"2024-05-09T05:23:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Ensure lwan_connection_get_fd() is always inlined","shortMessageHtmlLink":"Ensure lwan_connection_get_fd() is always inlined"}},{"before":"92b4ec7822ecc7fd540cc2869a0c035d4e17ee3d","after":"c26a3985690466a91d7cdd6ca1f26652f1a2d2f8","ref":"refs/heads/master","pushedAt":"2024-05-09T04:57:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"s/CONN_ASYNC_AWAIT_MULTIPLE/CONN_ASYNC_AWAITV/g\n\nMakes this more consistent with the API names I ended up using.","shortMessageHtmlLink":"s/CONN_ASYNC_AWAIT_MULTIPLE/CONN_ASYNC_AWAITV/g"}},{"before":"b530ed6e7f3744788967670ff0aa3c6abaa18461","after":"92b4ec7822ecc7fd540cc2869a0c035d4e17ee3d","ref":"refs/heads/master","pushedAt":"2024-05-09T04:50:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Simplify update_flags_for_async_awaitv()\n\nMove call to reset_conn_async_await_multiple_flag() to the mentioned\nfunction, so that the awaitv_all() and awaitv_any() functions don't\nneed to do it themselves.\n\nAlso, no need to clear the flag in the awaitv_any() case when returning\nfrom coro_yield().","shortMessageHtmlLink":"Simplify update_flags_for_async_awaitv()"}},{"before":"10e6865c40ebe86007172b3f013931b5407c090d","after":"b530ed6e7f3744788967670ff0aa3c6abaa18461","ref":"refs/heads/master","pushedAt":"2024-05-09T01:51:48.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Allow async/await on multiple file descriptors\n\nProvide two new public APIs: lwan_request_awaitv_any() and\nlwan_request_awaitv_all(), which, respectively, will await for\nan operation on at least one of the awaited file descriptors,\nreturning the one that unblocked the coroutine, and for all\nthe awaited file descriptors.\n\nThe APIs are experimental but you can already see how much\nit improves the chat implementation of the websockets sample:\nnow, instead of having to poll both the websocket and the\npub/sub subscription, and wait a few milliseconds, it now\ninstantaneously wakes up when there's data in either one of\nthem, and processes only what has data. The chat now feels\nlike a proper chat app (well, within reason for that crude\napp, but you get the idea).\n\n(As a side effect: we now send websocket pings periodically.)\n\nThere's a lot to clean up here, but I'm tired and this will\nbe done eventually.","shortMessageHtmlLink":"Allow async/await on multiple file descriptors"}},{"before":"bdaf9d498efd971b044679ef90a5e8951c9b4f71","after":"10e6865c40ebe86007172b3f013931b5407c090d","ref":"refs/heads/master","pushedAt":"2024-05-09T01:20:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Revert \"Factor out bitptr adjustment\"\n\nThis reverts commit a3bdbfc59c6545e4b3fd04ebaea1be583e6098ec.","shortMessageHtmlLink":"Revert \"Factor out bitptr adjustment\""}},{"before":"b099506d1a39a3637e2b01498459e82b9c8669f5","after":"bdaf9d498efd971b044679ef90a5e8951c9b4f71","ref":"refs/heads/master","pushedAt":"2024-05-08T00:46:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Add .mailmap file","shortMessageHtmlLink":"Add .mailmap file"}},{"before":"d56d5882e6b5b8205cdeec7d547c78ce7125d5ff","after":"b099506d1a39a3637e2b01498459e82b9c8669f5","ref":"refs/heads/master","pushedAt":"2024-04-30T02:39:54.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Tell whether Lwan is using libucontext or the builtin coro switcher","shortMessageHtmlLink":"Tell whether Lwan is using libucontext or the builtin coro switcher"}},{"before":"14384f5055d98a10873daf6515d4ba598822c5af","after":"d56d5882e6b5b8205cdeec7d547c78ce7125d5ff","ref":"refs/heads/master","pushedAt":"2024-04-29T03:07:40.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"FastCGI module requires chunked encoding\n\nSo error out if the request is HTTP/1.0.","shortMessageHtmlLink":"FastCGI module requires chunked encoding"}},{"before":"00a4c536e9ab42cd41936a9e9ffbdd5ccff4220f","after":"14384f5055d98a10873daf6515d4ba598822c5af","ref":"refs/heads/master","pushedAt":"2024-04-28T20:31:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Try harder to not reload the mask","shortMessageHtmlLink":"Try harder to not reload the mask"}},{"before":"f3e40361e2569864881be757287c36f6e82426a6","after":"00a4c536e9ab42cd41936a9e9ffbdd5ccff4220f","ref":"refs/heads/master","pushedAt":"2024-04-28T20:20:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"More simplifications to the websocket unmasking code","shortMessageHtmlLink":"More simplifications to the websocket unmasking code"}},{"before":"dc350c79847aab23ddbed9038b67c4eaa79e71d5","after":"f3e40361e2569864881be757287c36f6e82426a6","ref":"refs/heads/master","pushedAt":"2024-04-28T18:06:25.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"No need to reload the mask if we can extract it from the SSE path","shortMessageHtmlLink":"No need to reload the mask if we can extract it from the SSE path"}},{"before":"1d376b5d8715eb6c5fdf10b0aae06ee86269a076","after":"dc350c79847aab23ddbed9038b67c4eaa79e71d5","ref":"refs/heads/master","pushedAt":"2024-04-27T16:16:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Try to reuse mask vectors when unmasking websocket frames","shortMessageHtmlLink":"Try to reuse mask vectors when unmasking websocket frames"}},{"before":"e9fb3bfb854db0b2ca67d089992450bdc06cec82","after":"1d376b5d8715eb6c5fdf10b0aae06ee86269a076","ref":"refs/heads/master","pushedAt":"2024-04-24T02:02:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Limit size of values when expanding variables\n\nFuzzers are really good at finding these limits! This one was found in oss-fuzz.\r\n\r\nLimit size of a value in a key/value line to 1MiB, which is more than sufficient for a configuration file.","shortMessageHtmlLink":"Limit size of values when expanding variables"}},{"before":"f06c8d881a6bbee34ca6b29290775e5f5374ba4c","after":"e9fb3bfb854db0b2ca67d089992450bdc06cec82","ref":"refs/heads/master","pushedAt":"2024-04-19T14:29:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Disallow constants section anywhere other than the main scope\n\nFixes an OOM scenario (reproducer in fuzz/regresion/...).\n\nThanks to oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=68129","shortMessageHtmlLink":"Disallow constants section anywhere other than the main scope"}},{"before":"054212ca6aa773b9a8495bdf22c88cb2cc0c37e8","after":"f06c8d881a6bbee34ca6b29290775e5f5374ba4c","ref":"refs/heads/master","pushedAt":"2024-04-18T03:53:57.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Simplify websockets unmasking a bit more","shortMessageHtmlLink":"Simplify websockets unmasking a bit more"}},{"before":"7ea760eb9b6a9b1d86d30cc3cd10c5ace8837a5a","after":"054212ca6aa773b9a8495bdf22c88cb2cc0c37e8","ref":"refs/heads/master","pushedAt":"2024-04-16T14:37:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Remove `use_dynamic_buffer` bool from lwan_config struct\n\nNo need for this to be there anymore. Also, change all the bools\nat the end to bitfields of width 1 in an unsigned int.","shortMessageHtmlLink":"Remove use_dynamic_buffer bool from lwan_config struct"}},{"before":"0768148e25804f226910db7dfe45f4a5d109005e","after":"7ea760eb9b6a9b1d86d30cc3cd10c5ace8837a5a","ref":"refs/heads/master","pushedAt":"2024-04-15T00:07:19.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Make `request_buffer_size` be at least DEFAULT_BUFFER_SIZE","shortMessageHtmlLink":"Make request_buffer_size be at least DEFAULT_BUFFER_SIZE"}},{"before":"0533382633a9e818f2dd3d7540040eefc86019dc","after":"0768148e25804f226910db7dfe45f4a5d109005e","ref":"refs/heads/master","pushedAt":"2024-04-14T23:16:13.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Inline header_start in request helper struct","shortMessageHtmlLink":"Inline header_start in request helper struct"}},{"before":"a842cb2275c3b51c06a683d304f890890077402a","after":"0533382633a9e818f2dd3d7540040eefc86019dc","ref":"refs/heads/master","pushedAt":"2024-04-14T23:07:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Respond with HTTP_UNAVAILABLE if coro_malloc() fails","shortMessageHtmlLink":"Respond with HTTP_UNAVAILABLE if coro_malloc() fails"}},{"before":"e68709fbed8a179b4c7221319b55ea86bc36de31","after":"a842cb2275c3b51c06a683d304f890890077402a","ref":"refs/heads/master","pushedAt":"2024-04-14T16:34:39.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Use AVX2 when unmasking websockets frames\n\nThis already used SSE2, but let's use a wider vector if available to\nget this over more quickly.","shortMessageHtmlLink":"Use AVX2 when unmasking websockets frames"}},{"before":"b40d91aa0fcc0770dae40cd39c3ffdd8cf7fba3c","after":"e68709fbed8a179b4c7221319b55ea86bc36de31","ref":"refs/heads/master","pushedAt":"2024-04-14T15:09:13.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Fix warnings in lwan-tables when building in release mode","shortMessageHtmlLink":"Fix warnings in lwan-tables when building in release mode"}},{"before":"3ec5f7e3ee6f7d559da7d888d0023e095bf5ef16","after":"b40d91aa0fcc0770dae40cd39c3ffdd8cf7fba3c","ref":"refs/heads/master","pushedAt":"2024-04-14T07:30:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"lwan_request_get_header_from_helper() doesn't need to exist anymore\n\nThis was probably a remnant of some refactoring job.","shortMessageHtmlLink":"lwan_request_get_header_from_helper() doesn't need to exist anymore"}},{"before":"b9bd2b1eb2c2ef87314d0371d035f7947e6bf410","after":"3ec5f7e3ee6f7d559da7d888d0023e095bf5ef16","ref":"refs/heads/master","pushedAt":"2024-04-14T04:26:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Generate assertions in statuslookupgen to validate input\n\nAlthough inputs to this function have to come from an enum that is\ngenerated by the same X-macro that is used to build the perfect hash\ntable, anything could theoretically be passed to it if casted from an\ninteger. So assert that the returned string actually matches the\nrequested HTTP status code.\n\n(The lookup function wouldn't crash otherwise, but could return either\na 999 Invalid code, or some code that is valid but has nothing to do\nwith the requested code. Since this is just an assertion, this is\nmostly here to ensure that issues found during debugging are actually\ncaught.)","shortMessageHtmlLink":"Generate assertions in statuslookupgen to validate input"}},{"before":"7985267be6a2f78482b65e573157afd29ca1c9a8","after":"b9bd2b1eb2c2ef87314d0371d035f7947e6bf410","ref":"refs/heads/master","pushedAt":"2024-04-14T03:33:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Cleanup how listening sockets are created/passed down from systemd","shortMessageHtmlLink":"Cleanup how listening sockets are created/passed down from systemd"}},{"before":"c69a632032afca3263a2b0301e38817d644023a4","after":"7985267be6a2f78482b65e573157afd29ca1c9a8","ref":"refs/heads/master","pushedAt":"2024-04-14T03:15:19.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Use lwan_request_get_host() instead of the generic get_header()\n\nThe Host header is ready to be fetched from the request helper struct,\nso fetch it rather than looping through all the headers to find the\none we're looking for!","shortMessageHtmlLink":"Use lwan_request_get_host() instead of the generic get_header()"}},{"before":"284b34fbf51b40de1bf73771504d3791526b4957","after":"c69a632032afca3263a2b0301e38817d644023a4","ref":"refs/heads/master","pushedAt":"2024-04-09T15:43:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"lpereira","name":"L. Pereira","path":"/lpereira","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15001?s=80&v=4"},"commit":{"message":"Fix presentation of Lua logging function documentation","shortMessageHtmlLink":"Fix presentation of Lua logging function documentation"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAERkoaXwA","startCursor":null,"endCursor":null}},"title":"Activity ยท lpereira/lwan"}