Azat Khuzhin [Sun, 19 Sep 2021 12:59:57 +0000 (15:59 +0300)]
Merge branch 'skip-tests' -- fix/skip some tests to avoid complete check failures
* skip-tests:
test: add --retries-delay (and set to 1 second by default)
test: add --retries argument
Add -Wno-void-pointer-to-enum-cast (we use this hack in tests)
test/regress_http: mark data_length_constraints as retriable
github/workflows/mingw: use ctest --output-on-failure
test/dns: mark TCP tests as retriable
test/regress: retry some signal rlated tests in darwin
test/regress_util: mark monotonic_prc as retriable
test/regress_http: fix unix_socket test
test/regress_http: disable max_connections/data_length_constraints under windows
Add EV_WINDOWS macro
Azat Khuzhin [Sat, 18 Sep 2021 22:47:42 +0000 (01:47 +0300)]
test: cleanup stalled socket after running http/unix_sock
Otherwise it breaks upload-artifacts:
Run actions/upload-artifact@v1
Uploading artifact 'ubuntu-18.04-cmake-NONE-build' from '/home/runner/work/libevent/libevent/build' for run #346
Uploading 1095 files
File error 'No such device or address' when uploading file '/home/runner/work/libevent/libevent/build/foo'.
...
Error: No such device or address
Error: Exit code 1 returned from process: file name '/home/runner/runners/2.282.1/bin/Runner.PluginHost', arguments 'action "GitHub.Runner.Plugins.Artifact.PublishArtifact, Runner.Plugins"'.
Azat Khuzhin [Sat, 18 Sep 2021 22:23:07 +0000 (01:23 +0300)]
test: check return value of write()/send() in bufferevent_read_failed
This will also suppress:
../test/regress_bufferevent.c: In function ‘test_bufferevent_read_failed’: 1102
../test/regress_bufferevent.c:1395:2: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result] 1103
write(data->pair[0], buf, strlen(buf));
Azat Khuzhin [Sat, 18 Sep 2021 21:27:53 +0000 (00:27 +0300)]
Merge remote-tracking branch 'upstream/pr/1203'
@ploxiln:
"It seems like a bit of refactoring might be able to clean this code
up a bit, but it's a bit tricky because of the varied tricky usage of
chain structs, so this initial version has minimal changes ... "
* upstream/pr/1203:
buffer: do not round up allocation for reference-type chain objects
mbedtls just updated to version 3.0, install mbedtls@2 variant,
which needs more help being located since it's no longer the
default and no longer linked into the typical /usr/local dirs
These chain objects only store small structs with references to
other things, and these small structs do not themselves grow, so
bumping up the allocation to MIN_BUFFER_SIZE (512 bytes) is wasteful.
Azat Khuzhin [Fri, 9 Jul 2021 21:12:21 +0000 (00:12 +0300)]
Merge remote-tracking branch 'upstream/pr/1171'
* upstream/pr/1171:
ci: install pkg-config in mingw-w64 CI
build: test ac_cv_header_sys_time_h once, reformat timer* macro checks
build: remove call to AC_C_CONST()
build: replace ntp_pkg_config macro with a call to PKG_PROG_PKG_CONFIG()
build: remove NTP_PKG_CONFIG call from libevent_mbedtls.m4
build: stop using the deprecated form of AC_OUTPUT()
build: quote args in AC_ARG_ENABLE & AS_HELP_STRING
build: remove call to AC_HEADER_TIME
build: call AC_PREREQ() first & quote argument
build: remove call to AC_PREFIX_DEFAULT
build: remove call to AC_PROG_GCC_TRADITIONAL
fanquake [Tue, 15 Jun 2021 05:35:58 +0000 (13:35 +0800)]
build: remove call to AC_PREFIX_DEFAULT
> By default, configure sets the prefix for files it installs to /usr/local.
A call to AC_PREFIX_DEFAULT, just to set the value the same as the
default, would seem unnecessary. Note that the "initialize prefix"
comment dates back to aa6567fe6475d3230c7c745a7ca208735af0c331, prior to
when an autoconf macro was actually being used.
Azat Khuzhin [Tue, 23 Mar 2021 06:50:03 +0000 (09:50 +0300)]
Switch to lukka/run-vcpkg@v7 and update vcpkgGitCommitId
Let's see if it uses set-env or not [1]:
Run lukka/run-vcpkg@v2
Restore vcpkg and its artifacts from cache
Set output env vars
Error: Unable to process command '::set-env name=RUNVCPKG_VCPKG_ROOT::D:\a\libevent\vcpkg' successfully.
Error: The `set-env` command is disabled. Please upgrade to using Environment Files or opt into unsecure command execution by setting the `ACTIONS_ALLOW_UNSECURE_COMMANDS` environment variable to `true`. For more information see: https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/
error: could not open file /var/cache/pacman/pkg/libzstd-1.5.0-1-x86_64.pkg.tar.zst: Child process exited with status 127
error: could not open file /var/cache/pacman/pkg/zstd-1.5.0-1-x86_64.pkg.tar.zst: Child process exited with status 127
error: could not open file /var/cache/pacman/pkg/pacman-5.2.2-23-x86_64.pkg.tar.zst: Child process exited with status 127
error: failed to commit transaction (cannot open package file)
Azat Khuzhin [Tue, 27 Apr 2021 18:15:03 +0000 (21:15 +0300)]
Do not wrap lines in AC_CHECK_HEADERS/AC_CHECK_FUNCS (fixes detection in mingw)
Fixes: d433f847 ("Revert "build: use literals for AC_CHECK_HEADERS/AC_CHECK_FUNCS"") Fixes: 28f0fe6f ("build: use literals for AC_CHECK_HEADERS/AC_CHECK_FUNCS") Fixes: ce028cef ("build: fix autotools build under mingw")
Mike Sharov [Sun, 25 Apr 2021 13:12:29 +0000 (09:12 -0400)]
Retry write on EINTR in signal handler
The signal handler writes the received signal number as a byte value
into the notification pipe. If two signals are received in quick
succession, one of the writes may fail with EINTR without writing the
byte. This commit will check for EINTR and retry the write. If the error
is other than EINTR, a warning will be logged.
Note, that:
- on systems with sigaction libevent uses sigaction with SA_RESTART
- on linux writing to pipe is restartable and firstly it will try to
write that byte so linux should not be affected in any form [1].
Emil Engler [Fri, 2 Apr 2021 19:02:12 +0000 (21:02 +0200)]
sample: use unsigned short instead of int for port
The C standard gurantees that an unsigned short is at least up to 65535
huge. Enough to store every TCP port. Also the parameter PORT is
overgiven to the `htons()` function which assumes that the parameter is
of type `uint16_t` which unsigned short is on most platforms.
Azat Khuzhin [Sun, 28 Mar 2021 14:16:54 +0000 (17:16 +0300)]
build: use literals for AC_CHECK_HEADERS/AC_CHECK_FUNCS
autoconf 2.72 reports:
configure.ac:188: warning: AC_CHECK_HEADERS(\
): you should use literals
../autoconf-2.71/lib/autoconf/headers.m4:217: AC_CHECK_HEADERS is expanded from...
configure.ac:188: the top level
configure.ac:188: warning: AC_CHECK_HEADERS(afunix.h
): you should use literals
And also it fails to find fcntl.h and other headers because of this:
configure:14725: checking for fcntl.h
configure:14725: gcc -c -I/mingw64/include conftest.c >&5
conftest.c:77:10: fatal error: fcntl.h: No such file or directory
77 | #include < fcntl.h>
Azat Khuzhin [Sun, 28 Mar 2021 06:01:58 +0000 (09:01 +0300)]
build: fix autotools build under mingw
autotools that is shipped with mingw (autoconf 2.71-1, automake
1.6-1.16, automake wrapper 11-1), does not allow trailing backslashes
for AC_CHECK_HEADERS() and AC_CHECK_FUNCS(), otherwise it generates
incorrect for loop, and reports:
../configure: line 14724: syntax error near unexpected token `as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh`'
../configure: line 14724: ` as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh`'
Error: Process completed with exit code 1.
Here is a simple analog:
for VAR in <CR> foo \ <CR> bar \
do :
echo $VAR
done
fanquake [Sun, 28 Mar 2021 02:57:11 +0000 (10:57 +0800)]
build: remove splice implementation fragments
Looks like a `splice` implementation was planned, but has clearly never
eventuated (the TODO comment is from ~12 years ago, in 8b5bd77415fb6634fadf08357676926fecf5f032). For now, it's probably better
to remove the unused code/correct the docs.
Azat Khuzhin [Tue, 23 Mar 2021 06:40:30 +0000 (09:40 +0300)]
ci: fix upload-artifacts for linux dist build
Fixes [1]:
Run actions/upload-artifact@v1
Error: Path does not exist /home/runner/work/libevent/libevent/build
Error: Exit code 1 returned from process: file name '/home/runner/runners/2.277.1/bin/Runner.PluginHost', arguments 'action "GitHub.Runner.Plugins.Artifact.PublishArtifact, Runner.Plugins"'.
Azat Khuzhin [Tue, 23 Mar 2021 06:10:00 +0000 (09:10 +0300)]
Merge branch 'http-fix-fd-leak'
* http-fix-fd-leak:
http: fix fd leak on fd reset (by using bufferevent_replacefd())
bufferevent: introduce bufferevent_replacefd() (like setfd() but also close fd)
fanquake [Tue, 23 Mar 2021 01:52:14 +0000 (09:52 +0800)]
build: use AC_CHECK_LIB over AC_HAVE_LIBRARY
AC_HAVE_LIBRARY is deprecated, see
https://www.gnu.org/software/autoconf/manual/autoconf-2.70/html_node/Obsolete-Macros.html,
and has been prior to Autoconf 2.67, which is the minimum required by
the project. It's usage also causes warnings with newer versions of autoconf:
```bash
configure.ac:319: warning: The macro `AC_HAVE_LIBRARY' is obsolete.
configure.ac:319: You should run autoupdate.
```
`AC_HAVE_LIBRARY` was introduced in #969, although it's not clear why it
was decided to revert to using an obselete macro.
I recently found that when the network status changed when calling
bufferevent_socket_connect_hostname (e.g. switching between several
WIFIs), all DNS servers would fail, and the timeout of probe would be
very long if there were many DNS requests. I want libevent to support
manual setting of MAX_PROBE_TIMEOUT and TIMEOUT_BACKOFF_FACTOR
So move hardcoded MAX_PROBE_TIMEOUT and TIMEOUT_BACKOFF_FACTOR into
struct, and allow changing them.
Loïc Yhuel [Mon, 23 Nov 2020 16:24:36 +0000 (17:24 +0100)]
cmake: do not link libevent with libevent_core
When add_event_library macro was called without the INNER_LIBRARIES parameter, it reused the
value set by a previous call, since the INNER_LIBRARIES variable was not reset.
Azat Khuzhin [Mon, 2 Nov 2020 07:01:41 +0000 (10:01 +0300)]
Merge branch 'macos-brew-openssl-v2'
By Azat Khuzhin (2) and fanquake (1)
* macos-brew-openssl-v2:
Add autodetection of openssl via brew into build matrix
cmake: find openssl prefix via brew
autotools: attempt to find OpenSSL via homebrew on macOS
autotools: attempt to find OpenSSL via homebrew on macOS
When compiling for macOS, where users will likely have OpenSSL installed
via brew, rather than available on the system, use brew --prefix to
figure out where OpenSSL is, and then augment the pkg-config path so
that libs are found.
Azat Khuzhin [Sat, 31 Oct 2020 19:48:37 +0000 (22:48 +0300)]
Fix BEV_IS_SSL() macro
We cannot use the same trick with external declaration,
since there are copy of bufferevent_ops_ssl in each library:
- openssl
- mbedlts
However we can just compare the name of the bufferevent type for now.
(It is totally fine to use memcmp() here since it will be optimized by the compiler).