Log

Author Commit Date CI Message
Azat Khuzhin b6309bcc 2018-11-13T11:10:25 Merge branch 'sample-http-server' Some improvements for http-server sample: - getopt - persistent port via -p option - IOCP for win32 via -I - disable buffering - enable debug logging via -v/EVENT_DEBUG_LOGGING_ALL - cleanup (by signal and separate error path on errors) * sample-http-server: s/http-server: graceful cleanup s/http-server: enable debug logging if EVENT_DEBUG_LOGGING_ALL env isset s/http-server: turn off buffering (otherwise do output on win32) s/http-server: add an option to use IOCP s/http-server: add options (for persistent port) Refs: #709 (cherry picked from commit 9a4b8ec1b64fab27544f154076261afdf1efac07)
Azat Khuzhin 3bc602c2 2018-11-08T00:36:07 regress_ssl: fix ssl/bufferevent_wm_filter for non defered callbacks Even after referenced patch there is still possible recursive callbacks from evbuffer_drain(bev_input), i.e.: wm_transfer() -> evbuffer_drain() -> wm_transfer() inc(ctx->get) But if we will increment ctx->get before drain that we will not add more data to buffer. Refs: 54c6fe3c ("regress_ssl: make ssl/bufferevent_wm_filter more fault-tolerance") CI: https://ci.appveyor.com/project/nmathewson/libevent/build/job/f0rv299i71wnuxdq#L2546 (cherry picked from commit 1fc1c7ef1dabbbb358b99b893712bccc5761f82d)
Azat Khuzhin cb8b6f17 2018-11-05T17:04:47 appveyor: cache build directory to reduce overall time (6x time faster) various build checks (i.e. detecting headers/macroses/functions) takes 7 minutes (from 13 minutes in total) for cmake, which is too high. By using cache we can reduce this to ~0. And set APPVEYOR_SAVE_CACHE_ON_ERROR so that cmake checks will be cached (anyway all sources will be built from scratch due to timestamp updates while extracting from sources). (cherry picked from commit 54fdd6bb6ebe6b0a672c79d30a712d97536500c8)
Azat Khuzhin 3d3d1e05 2018-11-05T18:23:31 cmake: set CMP0074 to NEW (for OPENSSL_ROOT in appveyor) We have $env:OPENSSL_ROOT (env) equals to -DOPENSSL_ROOT (cmake variable) anyway. cmake complains: Policy CMP0074 is not set: find_package uses <PackageName>_ROOT variables. Run "cmake --help-policy CMP0074" for policy details. Use the cmake_policy command to set the policy and suppress this warning. Environment variable OpenSSL_ROOT is set to: C:/OpenSSL-Win64/bin For compatibility, CMake is ignoring the variable. This warning is for project developers. Use -Wno-dev to suppress it. (cherry picked from commit 65904773f2bf965e2050d4d7c91e30d4f123a787)
Azat Khuzhin b021b979 2018-11-05T22:58:25 travis: use homebrew via addon (-~4min/16% from the build time) (cherry picked from commit 58e853f2c54dca223cd2d42665e74c2208c84cf1)
Azat Khuzhin 2ffa59da 2018-11-06T01:22:13 appveyor: disable verbosity (cherry picked from commit 506189350889dd7270801f3383524eb2acbfb862)
Azat Khuzhin 1b6ce89b 2018-11-06T11:30:18 appveyor: skip travis patches (by commit subject/files) (cherry picked from commit 9afe7a6c12c112a6cbc49cf1bd684781275b2579)
Azat Khuzhin e7292a59 2018-11-05T18:00:41 appveyor: do not run on branches that has "travis" in it's name (cherry picked from commit 1503a9a1a6aea641784fa7aae83ad00e57e35431)
Azat Khuzhin 5e5de36f 2018-11-05T18:30:38 cmake: set CMP0075 to NEW (for ws2_32.lib in win32) Otherwise cmake complains: Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES. Run "cmake --help-policy CMP0075" for policy details. Use the cmake_policy command to set the policy and suppress this warning. CMAKE_REQUIRED_LIBRARIES is set to: ws2_32.lib For compatibility with CMake 3.11 and below this check is ignoring it. (cherry picked from commit 6d3a53966bc822fd580a6a02301838aca601391b)
Azat Khuzhin a39898f3 2018-11-04T01:21:48 Merge branch 'check-O_NONBLOCK-in-debug' * check-O_NONBLOCK-in-debug: regress: use non blocking descriptors whenever it is possible assert that fds are nonblocking in debug mode Closes: nmathewson/Libevent#90 (cherry picked from commit 6f988ee161680925fc3308f17d293c680e3ac916)
Azat Khuzhin bf3a67cf 2018-10-31T06:34:40 Add cmake rules into dist archive Fixes: #502 Refs: #551 (cherry picked from commit 69bc2da79fb2f358c22feba45e9ad4752729d320)
Azat Khuzhin ca4b6404 2018-10-31T01:22:30 Merge branch 'event-ET-#636-v2' * event-ET-#636-v2: Preserve ET bit for backends with changelist Epoll ET setting lost with multiple events for same fd Cover ET with multiple events for same fd Add ET flag into event_base_dump_events() Fixes: #636 (cherry picked from commit 33053cdd8a9e1a7330b47759dee9cb209bed8f1b)
Azat Khuzhin 5e97b6e6 2018-10-28T20:52:32 appveyor: reconfigure tests with allow_failure and fast_finish (cherry picked from commit e17e1ee91d292e8a1c7b6ac9e76dd29906d517dc)
Azat Khuzhin 98d0f923 2018-11-05T22:25:15 regress_ssl: make ssl/bufferevent_wm_filter more fault-tolerance Due to inplace callbacks (i.e. no BEV_OPT_DEFER_CALLBACKS) we cannot be sure that wm_transfer() will not be called recursively and indeed it still happens sometimes, and the referenced patch increase amount of this times, especially for linux/poll. Fixes: 66304a23cf748714159c988e78f35401c5352827 ("Fix ssl/bufferevent_wm_filter when bev does not reach watermark on break") (cherry picked from commit 54c6fe3c06cb5342130467ecf0f78e3f6d854a36)
Azat Khuzhin 35ca9643 2018-11-05T21:33:54 regress_http: disable http/read_on_write_error under win32 EVHTTP_CON_READ_ON_WRITE_ERROR works only if an error already read from the socket, but if we already got EPIPE on write we cannot read from the socket anymore, and win32 does not guarantee that read will happens before (although it happens from time to time). In the referenced patch I just replaced callback with not expecting 417, but like I already wrote, this is not always true (i.e. it is flacky). Fixes: 3b581693ac1967f7f8d98491cb772a1b415eb4cd ("test/http: read_on_write_error: fix it for win32") (cherry picked from commit 9040707fb176040acf250b09a223d6b4400f4086)
Azat Khuzhin f12cd17b 2018-11-05T18:02:05 travis-ci: exclude appveyor branches (cherry picked from commit 0345adf7e43d0c776f73edf95b0648dbb43fdf52)
Azat Khuzhin b52c6498 2018-11-04T19:48:11 cmake: do not detect _GNU_SOURCE/__GNU_LIBRARY__ if it is cached (cherry picked from commit 3ed93997387296e374d8a2dd770e43ddfa3328e9)
Azat Khuzhin 30020a35 2018-11-04T21:41:20 Merge branch 'ssl_bufferevent_wm_filter-fix' * ssl_bufferevent_wm_filter-fix: Fix ssl/bufferevent_wm_filter when bev does not reach watermark on break regress_ssl: cover watermarks with deferred callbacks regress_ssl: improve bufferevent_wm/bufferevent_wm_filter logging (cherry picked from commit 9d93fbe77968da5ca5b2dbe8973e6f3c3045c5ba)
Azat Khuzhin 6594bfb4 2018-11-02T23:43:57 regress_http: make https_basic non time dependent Fixes: #454 (cherry picked from commit e29afd4b9428631444b208edfe3a4ba6ce4423af)
Azat Khuzhin 349081e1 2018-10-28T19:48:37 Merge branch 'win32-visibility-event_debug_logging_mask_' * win32-visibility-event_debug_logging_mask_: Introduce EVENT_VISIBILITY_WANT_DLLIMPORT regress_http: use TT_BLAZER() over event_debug() Fixes: #702 (cherry picked from commit fb8666453ce8bb1d599a68636bed5db5ef4a7a57)
Azat Khuzhin 1c865238 2018-10-28T18:11:22 Check existence of IPV6_V6ONLY in evutil_make_listen_socket_ipv6only() (mingw32) MinGW 32-bit 5.3.0 does not defines it and our appveyour [1] build reports this instantly: evutil.c: In function 'evutil_make_listen_socket_ipv6only': evutil.c:392:40: error: 'IPV6_V6ONLY' undeclared (first use in this function) return setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (void*) &one, [1]: https://www.appveyor.com/docs/windows-images-software/#mingw-msys-cygwin Another solution will be to use mingw64 which has it, but I guess we do want that #ifdef anyway. (cherry picked from commit 23e79fd764b9f36f560d470f0fb60295dd942ac2)
Azat Khuzhin 12e0d889 2018-10-28T16:46:24 Convert evbuffer_strspn() (internal helper) to use size_t As pointed by @yankeehacker in #590: Signed to Unsigned Conversion Error - buffer.c:1623 Description: This assignment creates a type mismatch by populating an unsigned variable with a signed value. The signed integer will be implicitly cast to an unsigned integer, converting negative values into positive ones. If an attacker can control the signed value, it may be possible to trigger a buffer overflow if the value specifies the length of a memory write. Remediation: Do not rely on implicit casts between signed and unsigned values because the result can take on an unexpected value and violate weak assumptions made elsewhere in the program. Fixes: #590 (cherry picked from commit 931ec2370228e40309af51b86e10fa364a37a20e)
Azat Khuzhin 5e439e50 2018-10-28T15:16:24 buffer: add an assert for last_with_datap to suppress static analyzer ../buffer.c:2231:6: warning: Access to field 'flags' results in a dereference of a null pointer if (CHAIN_SPACE_LEN(*firstchainp) == 0) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../buffer.c:130:30: note: expanded from macro 'CHAIN_SPACE_LEN' #define CHAIN_SPACE_LEN(ch) ((ch)->flags & EVBUFFER_IMMUTABLE ? \ (cherry picked from commit f83ac92da9fff789135d1e5b9050653cf7fdb517)
Azat Khuzhin 2ad11022 2018-10-28T02:00:16 bench_cascase: include getopt.h only for _WIN32 (like in other places) Fixes: #561 (cherry picked from commit fb42e0fac60d31e081cce4c19df6061bcb56df20)
Maya Rashish a2176f2c 2017-09-23T06:57:16 Define __EXT_POSIX2 for QNX POSIX 1003.2 extension is necessary for getopt interface. Reported here [1] (not mine, I can't test) [1]: https://mail-index.netbsd.org/pkgsrc-users/2017/09/20/msg025601.html Closes: #563 (cherry-pick) (cherry picked from commit 99a3887d66885204ed8fa13405ae04b632dc8d33)
Azat Khuzhin f895e17e 2018-10-27T19:34:52 regress_ssl: reset static variables on test setup/cleanup and eliminate leaks One tricky bit is reply to the BIO_C_GET_FD command, since otherwise it will try to close(0) and accepted bev in ssl/bufferevent_connect_sleep will leak. Other seems more or less trivial. This was done to make sure that for at least generic cases does not leak (tricky cases was listed here nmathewson/Libevent#83). And this will allow run ssl/.. with --no-fork (cherry picked from commit 9fe952a0aea25474de3dbc30350b1ffa5abcd65a)
Azat Khuzhin a9a5cf4d 2018-10-27T19:41:52 test: export basic_test_setup/basic_test_cleanup to extend them (cherry picked from commit 7cec9b95a3aefb85fcf75610abc8e27e284b251d)
Azat Khuzhin acf4821d 2018-10-27T14:58:30 cmake: add various warning flags like autotools has This is mostly to match autotools and reduce amount mixiing declarations and code. Added: - -Wextra (the same as -W), -Wno-unused-parameter -Wstrict-aliasing - -fno-strict-aliasing (gcc 2.9.5+) - -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement (4.0+) - -Waddress -Wno-unused-function -Wnormalized=id -Woverride-init (4.2+) - -Wlogical-op (4.5+) Removed: - -Wformat (include in -Wall) Plus use CMAKE_C_COMPILER_ID over CMAKE_COMPILER_IS_GNUCC, as cmake-variables(7) suggesting, and add common GNUC/CLANG variables. v2: drop checks for flags, since add_compiler_flags() will check if such flags exists anyway (but just to note, gcc ignores non existing warning flags by default). (cherry picked from commit 8348b41308a7126d009bb6e0b33aa5f465e1dc33)
Azat Khuzhin bff1423d 2018-10-27T16:49:39 autotools: do not add warnings that is included into -Wall already Plus remove duplicates (cherry picked from commit 006c528a21f8beec8993134c12610bd16cde7fff)
Murat Demirten ba148796 2018-06-04T16:43:34 listener: ipv6only socket bind support According to RFC3493 and most Linux distributions, default value is to work in IPv4-mapped mode. If there is a requirement to bind same port on same ip addresses but different handlers for both IPv4 and IPv6, it is required to set IPV6_V6ONLY socket option to be sure that the code works as expected without affected by bindv6only sysctl setting in system. See an example working with this patch: https://gist.github.com/demirten/023008a63cd966e48b0ebcf9af7fc113 Closes: #640 (cherry-pick) (cherry picked from commit 387d91f9ab95df8ac3d7bb58493310ad4a377dcf)
Azat Khuzhin b07e43e6 2018-10-25T00:50:50 Merge branch 'evutil_found_ifaddr-dev' * evutil_found_ifaddr-dev: Cover evutil_v4addr_is_local_()/evutil_v6addr_is_local_() Split evutil_found_ifaddr() into helpers (evutil_v{4,6}addr_is_local()) Use INADDR_ANY over 0 in evutil_found_ifaddr() Replace EVUTIL_V4ADDR_IS_*() macroses with static inline functions Filter link-local IPv4 addresses in evutil_found_ifaddr() (cherry picked from commit b2667b76969c2ea382373f885062b45e82d0ac59)
Azat Khuzhin cdcfbafe 2018-10-23T00:12:23 Merge branch 'http-request-line-parsing' * http-request-line-parsing: Fix http https_basic/https_filter_basic under valgrind (increase timeout) http: cover various non RFC3986 conformant URIs http: allow non RFC3986 conformant during parsing request-line (http server) http: do not try to parse request-line if we do not have enough bytes http: allow trailing spaces (and only them) in request-line (like nginx) http: cleanup of the request-line parsing (cherry picked from commit 0ec12bc84cf09307e01dc3b00d08ac1f816b6ff7)
Azat Khuzhin d76823d4 2018-10-27T23:58:18 travis-ci: do not notify irc.oftc.net#libevent I think that this just introduce noise that people just turns off. So very questionable let's remove it. (cherry picked from commit 5264c03f8a8ac759ef42e5dfdfb3fda0accd12f6)
Azat Khuzhin e86ccfe5 2018-10-27T18:35:08 be_openssl: avoid leaking of SSL structure From nmathewson/Libevent#83 by @fancycode: There are a few code paths where the passed SSL object is not released in error cases, even if BEV_OPT_CLOSE_ON_FREE is passed as option while for others it is released. That way it's impossible for the caller to know it he has to free it on errors himself or not. Line numbers are from "bufferevent_openssl.c" in 911abf3: L1414 ("underlying == NULL" passed) L1416 (bio could not be created) L1446 (different fd passed) L1325 (both underlying and fd passed) L1328 (out-of-memory) L1333 ("bufferevent_init_common_" failed) In all error cases after the "bufferevent_ops_openssl" has been assigned, the option is evaluated on "bufferevent_free" (L1399) and the SSL object released (L1226). Fixes: nmathewson/Libevent#83 (cherry picked from commit acf09c00e2825420cc4ff801518e4ecfe2b31a03)
Azat Khuzhin 83275459 2018-10-27T18:29:57 be_openssl: drop close_flag parameter of the BIO_new_bufferevent() (cherry picked from commit 474d72aeac818198737aa7cb009578c464db11ca)
Azat Khuzhin f3aa6a47 2018-10-27T17:36:09 regress_http: basic evhttp_parse_query_str() coverage (cherry picked from commit d161ec3842259f2896fc9b15a1e4d5a1ed178bb2)
Azat Khuzhin 698ebed6 2018-10-22T01:06:48 Disable parallel jobs for the osx (due to CPU time deficit) in travis-ci As you can see right now linux workers has zero failed tests, while osx workers has 18 failed tests: [bufferevent_connect_hostname_emfile FAILED] [bufferevent_pair_release_lock FAILED] [bufferevent_timeout FAILED] [bufferevent_timeout_filter FAILED] [bufferevent_timeout_pair FAILED] [common_timeout FAILED] [del_wait FAILED] [immediatesignal FAILED] [loopexit FAILED] [loopexit_multiple FAILED] [monotonic_res FAILED] [no_events FAILED] [persistent_active_timeout FAILED] [persistent_timeout_jump FAILED] [signal_switchbase FAILED] [signal_while_processing FAILED] [simpletimeout FAILED] [usleep FAILED] And this patch should remove from this list time related failures (though maybe not all of them). (cherry picked from commit 2f43d1d4091f4f87b8679de4b4967561861141de)
Azat Khuzhin dd472e7d 2018-10-22T01:00:54 Use matrix.fast_finish for the travis-ci to mark the build ASAP AFAIR there is shortage of osx workers on travis-ci, IOW builds that requires them can wait fair amount of time in the queue by just waiting. Plus linux workers AFAICS can run multiple jobs in parallel (4-5), while osx does not. Hence if we do allow failures for osx (and right now they have a lot of failed tests) let's mark build result based on tests under linux only. So in a nut shell this will reduce build time from 5 hours to 20-30 minutes. (cherry picked from commit 5d3e8c15e7482c35ae7c9768f6f61a5e6850c035)
Azat Khuzhin 731053b0 2018-10-21T18:31:01 Simplify bufferevent timeout tests to reduce CPU usage in between start/compare Between start (setting "started_at") and comparing the time when timeouts triggered with the start (test_timeval_diff_eq), there is too much various things that can introduce extra delays and eventually could fail the test on machine with shortage of CPU. And this is exactly what happend on: - travis-ci - #262 Here is a simple reproducer that I came up with for this issue: docker run --cpus=0.01 -e LD_LIBRARY_PATH=$PWD/lib -e PATH=/usr/bin:/bin:$PWD/bin -v $PWD:$PWD --rm -it debian:testing regress --no-fork --verbose bufferevent/bufferevent_timeout Under limited CPU (see reproducer) the test almost always has problems with that "write_timeout_at" exceed default timeval diff tolerance (test_timeval_diff_eq() has 50 tolerance), i.e.: FAIL ../test/regress_bufferevent.c:1040: assert(labs(timeval_msec_diff(((&started_at)), ((&res1.write_timeout_at))) - (100)) <= 50): 101 vs 50 But under some setup write timeout can even not triggered, and the reason for this is that we write to the bufferevent 1024*1024 bytes, and hence if evbuffer_write_iovec() will has some delay after writev() and not send more then one vector at a time [1], it is pretty simple to trigger, i.e.: FAIL ../test/regress_bufferevent.c:1040: assert(labs(timeval_msec_diff(((&started_at)), ((&res1.write_timeout_at))) - (100)) <= 50): 1540155888478 vs 50 [1]: https://gist.github.com/azat/b72773dfe7549fed865d439e03de05c1 So this patch just send static small payload for all cases (plus a few more asserts added). The outcome of this patch is that all regression tests passed on travis-ci for linux box [2]. While before it fails almost always [3]. Also reproducer with CPU limiting via docker also survive some iterations (and strictly speaking it should has less CPU then travis-ci workers I guess). [2]: https://travis-ci.org/azat/libevent/builds/444391481 [3]: https://travis-ci.org/libevent/libevent/builds/444336505 (cherry picked from commit 6ac8e775bb3cba49c276c90e288554635d38b466)
Bogdan Harjoc 0033f5cc 2018-08-09T13:04:52 evdns: handle NULL filename explicitly Otherwise we will try to open NULL filename and got EFAULT and anyway will got the same return code from evdns_base_resolv_conf_parse_impl() Closes: #680 (cherry-picked) (cherry picked from commit 3e6553a1808989c15b8dd1945b4707b7d35667ad)
Azat Khuzhin 6e759975 2018-10-21T03:15:34 Merge branch 'regress-dns-fixes' * regress-dns-fixes: Do not rely on getservbyname() for most of the dns regression tests Turn off dns/getaddrinfo_race_gotresolve by default Fix an error for debug locking in dns/getaddrinfo_race_gotresolve (cherry picked from commit bd2184d8d42f721fa523d01b9a9250c75fedb855)
Jiri Luznicky cdd52e7f 2018-05-23T15:39:13 Fix missing LIST_HEAD Despite the presence of 'sys/queue.h' in some stdlib implementations (i.e. uclibc) 'LIST_HEAD' macro can be missing. This fix defines this macro in the same manner as was done previously for 'TAILQ_'. Fixes: #539 Closes: #639 (cherry-picked) Backport: 2.1.9 (cherry picked from commit 95918754d2ba7e6bffe0fc74bebed60bd917c10c)
Azat Khuzhin 235b5521 2018-10-18T23:16:05 Make cmake's check_const_exists() rely on cache (cherry picked from commit 4c61a04cd5207f2140b65f955559aa4ffc848e9c)
Azat Khuzhin 3f692fff 2018-10-17T23:21:32 Merge branch 'be-wm-overrun-v2' * be-wm-overrun-v2: Fix hangs due to watermarks overruns in bufferevents implementations test: cover watermarks (with some corner cases) in ssl bufferevent Fixes: #690 (cherry picked from commit 878bb2d3b9484b27594308da1d0d6a7c9bdf6647)
Azat Khuzhin 2594a96f 2018-10-17T11:14:48 Add -fdiagnostics-color=always for Ninja (cherry picked from commit cec4a37120b7fe07525018e4415db8adcfba9299)
Azat Khuzhin e05136c7 2018-09-14T02:24:44 evrpc: avoid NULL dereference on request is not EVHTTP_REQ_POST Fixes: #660 (cherry picked from commit 8483c5351abdd18766232de8431290165717bd57)
Carlo Marcelo Arenas Belón 7d6c88dd 2018-08-15T13:57:01 test: make sure pthread is defined avoid warnings with any modern C99 compiler due to implicit function declaration for pthread_create, as shown by the following : test/regress_dns.c:2226:2: warning: implicit declaration of function 'pthread_create' is invalid in C99 [-Wimplicit-function-declaration] THREAD_START(thread[0], race_base_run, &rp); ^ test/regress_thread.h:35:2: note: expanded from macro 'THREAD_START' pthread_create(&(threadvar), NULL, fn, arg) ^ test/regress_dns.c:2226:2: warning: this function declaration is not a prototype [-Wstrict-prototypes] test/regress_thread.h:35:2: note: expanded from macro 'THREAD_START' pthread_create(&(threadvar), NULL, fn, arg) ^ $ clang --version Apple LLVM version 9.1.0 (clang-902.0.39.2) Target: x86_64-apple-darwin17.7.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin Closes: #686 (cherry-picked) (cherry picked from commit 7af974eeaa7e5cf2f73e3176782c5a788a74f08e)
Azat Khuzhin 6e81eaf2 2018-08-18T23:50:10 appveyor: add all build tree into artifacts in case of failure This will help in investigations of win32 failures... P.S. looks like there is no better way, since "artifacts.*.publish_on_failure" hadn't been implemented yet (while was requiested in 2015). (cherry picked from commit 29cc8386a2f7911eaa9336692a2c5544d8b4734f)
Bogdan Harjoc d0cde454 2018-08-09T14:47:17 dns-example: free result in getaddrinfo callback According to evdns.c, the result not freed by libevent after the callback runs: evdns_getaddrinfo_gotresolve() { ... data->user_cb(0, data->pending_result, data->user_data); data->pending_result = NULL; ... } To reproduce, build with -fsanitize=address, add -g to the getopt list in dns-example.c like in the current commit and run dns-example -g google.com Closes: #681 # cherry-picked (cherry picked from commit 855f0804305a545da6880850d16809969ce72edd)
Philip Prindeville d6c293af 2018-06-16T17:16:10 Eliminate compiler warnings (at least for gcc/linux) Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> Closes: #646 # cherry-picked from the PR (cherry picked from commit be371163027d3988a30620537bf3fcb81fb7f077)
Azat Khuzhin 3237d697 2018-08-02T09:29:29 Merge branch 'evdns_getaddrinfo-race-fix' * evdns_getaddrinfo-race-fix: evdns: add regress test for getaddrinfo race evdns: fix race condition in evdns_getaddrinfo() Merges: #673 (cherry picked from commit ee12c516cf5766b2c32203dcc20c32b8691a8ebb)
Azat Khuzhin b3af7bdd 2018-06-19T10:15:08 Cleanup __func__ detection First of all __func__ is not a macro, it is char[] array, so the code that we had before in cmake, was incorrect, i.e.: #if defined (__func__) #define EVENT____func__ __func__ #elif defined(__FUNCTION__) #define EVENT____func__ __FUNCTION__ #else #define EVENT____func__ __FILE__ #endif So just detect do we have __func__/__FUNCTION__ in configure/cmake before build and define EVENT__HAVE___func__/EVENT__HAVE___FUNCTION__ to use the later to choose which should be used as a __func__ (if it is not presented). Closes: #644 (cherry picked from commit e85818d24850540d220e6d7bc0a30653ba2135f2)
Azat Khuzhin 21bfaa70 2018-08-01T09:48:42 Merge branch 'official/pr/671' -- README cleanup * official/pr/671: Capitalise project names consistently in README.md Indent configure flag section to make markdown format them as code Use https for resources that support it Rewords awkward sentences in README.md Fix typos in README.md (cherry picked from commit c3a6fe75e1511a4c7a7a6ef0a5954b1918902933)
Azat Khuzhin d7579fb9 2018-08-01T00:58:02 autotools: include win32 specific headers for socklen_t detection on win32/mingw The [1] removes EVENT__ prefix, and now if we will incorrectly detect that "foobar" (or socklen_t in our case) type is not available, but somewhere later it will be available then we will get next error [2]: error: two or more data types in declaration specifiers According to [3]: - Compile something in Cygwin and you are compiling it for Cygwin. - Compile something in MinGW and you are compiling it for Windows. And I can confirm this, since there is _WIN32 defined (according to [4]) And since according to [5] our image in appveyour (Visual Studion 2015) has mingw (and we use it, not cygwin) we need ws2tcpip.h (over sys/socket.h -- which does not exist in win32) header to detect socklen_t existence. [1]: 587e9f5828c4eb3c6e79e9eb29f174e4ae0c05bd ("config.h can't be prefixed unconditionally") [2]: https://ci.appveyor.com/project/nmathewson/libevent/build/job/yonukoc5q3tr3e5e#L372 [3]: https://stackoverflow.com/questions/771756/what-is-the-difference-between-cygwin-and-mingw [4]: https://www.appveyor.com/docs/build-environment/#mingw-msys-cygwin [5]: https://ci.appveyor.com/project/nmathewson/libevent/build/job/yonukoc5q3tr3e5e#L164 Fixes: #649 (cherry picked from commit 4728ffed865985ab663b2e067afb904d124fc1db)
Azat Khuzhin 9bcfcbda 2018-08-01T03:01:43 appveyor: disable almost all configurations (except autotools/cmake basic) Since we have FREE plan, we have a lot of limits on our builds, so let's reduce their amount to make them run/start faster (I hope). (cherry picked from commit bdd531288affe9fa46184bb9b492defbcf379c63)
Xiaozhou Liu aade513b 2018-07-05T11:25:24 Fix typo Closes: #658 (cherry picked from commit 30d77f1b59bcd1433a89e803b9fa045c50883868)
an-tao 00761b43 2018-05-25T18:07:28 fix spelling mistakes Closes: nmathewson/Libevent#162 (cherry picked from commit 0789bc5220af6eaa9b483afcd1405be6f01d2187)
Philip Prindeville 63a054f8 2018-04-18T15:09:35 config.h can't be prefixed unconditionally The script make-event-config.sed was mangling all the symbols by prefixing them with "EVENT__". The problem here is that some symbols aren't for local consumption within libevent, but rather influence other system header files (ex: __USE_FILE_OFFSET64 is used by dozens of header files including <sys/sendfile.h>). As a workaround, all symbols starting with a capital letter only (with the exception of STDC_HEADERS which must also be left untouched) will be mangled. Future contributors will need to be aware of this distinction. (cherry picked from commit 587e9f5828c4eb3c6e79e9eb29f174e4ae0c05bd)
Azat Khuzhin e2732c90 2018-05-07T02:39:44 Make rpc headers self-compilable Fixes: #633 (cherry picked from commit c57f5c34903b02c6e7378865f71a2b83a5befb96)
Nathan French 0d5dde53 2018-07-05T12:46:51 [http] fix C90 warnings (cherry picked from commit 514dc7579c43e673bdf613e01690371438661260)
Philip Prindeville 061823b1 2018-06-20T23:47:51 Tell Travis to use quiet git clone Otherwise the logs show a bunch of pointless progress, which is really only useful for interactive sessions. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> Closes: #651 (cherry-picked) (cherry picked from commit 24236aed01798303745470e6c498bf606e88724a)
Leo Zhang 780eaac8 2018-05-15T12:14:05 test: make regress_dns C89 compatible Closes: #635 (cherry-picked) (cherry picked from commit d9ffd2213702bc22c467bd83c230a1a5e97e9e67)
Azat Khuzhin 37423849 2018-06-21T02:37:24 Ignore evconfig-private.h for autotools Fixes: e2874d95af584b3657eb5dc1d2e5404811dce117 ("Adopt ignore rules for cmake + ninja") (cherry picked from commit 064a598716e69a1ac3937dd1bbc74194d0f3d3cf)
Azat Khuzhin 85fed75f 2018-06-19T10:18:46 Replace all EVENT_HAVE with EVENT__HAVE (EVENT__HAVE_USLEEP) (cherry picked from commit 35258a1f4e09d9e7fcb003cd0572343670180495)
Philip Prindeville 06ec5de6 2018-06-16T17:39:34 Add convenience macros for user-triggered events Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> Closes: #647 (picked) (cherry picked from commit d2acf67ec3ad2916236396992f094c0c65016028)
Philip Prindeville 8ab60087 2018-06-16T16:44:06 Get rid of macros which are never used There are no expansions of these macros or tests for their existence. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> (cherry picked from commit 755896efe25e5caecd498c08cce072c713720783)
Azat Khuzhin d9d1c09e 2018-04-24T00:59:11 Notify event base if there are no more events, so it can exit without delay Fixes: #623 (cherry picked from commit 23c2914f6b430f2c2d74c267c13ffab3dda1b325)
Azat Khuzhin 44fa5b19 2018-04-23T01:50:55 Fix CheckFunctionExistsEx() cmake macro on win32 For example under mingw64 it could not detect that strtok_r() exists, because it checks with: void *p = func_name; And for this you need the function to be defined, so just sync our CheckFunctionExistsEx.c with CheckFunctionExists.c from cmake (and later we should drop them out) since it does correct things to detech functions existence. Also for WIN32 there is -FIwinsock2.h -FIws2tcpip.h, and I guess that is not works for mingw gcc (since -F in gcc is framework, and in windows -FI is like -include in gcc). But looks like we do not need them already (due to fixed CheckFunctionExistsEx()). Refs: #605 (cherry picked from commit accf383e044257ecdef002ea255056a5d15a4811)
Azat Khuzhin 0d194c4e 2018-04-24T14:46:06 test/dns: install correct RLIMIT_NOFILE in bufferevent_connect_hostname_emfile Otherwise poll() will fail with EINVAL: EINVAL The nfds value exceeds the RLIMIT_NOFILE value. P.S. and cleanup this test a little, with early-return. CI: https://travis-ci.org/libevent/libevent/jobs/370350426 (cherry picked from commit d1c8993c3c34030b68ecb6079bd9dce8cb3d3604)
Azat Khuzhin dfb5fc16 2018-04-24T02:56:08 travis-ci: allow tests under osx to fail (temporary, until we will fix them) (cherry picked from commit da028dec497722793ada3ce1a0358c1bf68161de)
Azat Khuzhin 61b95600 2018-04-24T02:22:58 test/http: cover evhttp_connection_get_addr() for incomming connections Refs: #510 (cherry picked from commit e4edc7fc27bb96b4811f1c24d591f5c5bca69bdd)
Greg Hazel 4215c003 2018-02-11T16:28:58 Fix evhttp_connection_get_addr() fox incomming http connections Install conn_address of the bufferevent on incomping http connections (even though this is kind of subsytem violation, so let's fix it in a simplest way and thinkg about long-term solution). Fixes: #510 Closes: #595 (pick) (cherry picked from commit 367cd9e5c2b8e3f9b8dbed40bfe8a0ed79285c36)
Azat Khuzhin f3eb294f 2018-04-24T01:45:00 test/dns: verify bufferevent_socket_connect() errorcb invoking if socket() fails Refs: #600 (cherry picked from commit a3d8f2e09302536c6c0ffc3ccb1fc6f43b51dc4f)
Jesse Fang 1dde74ef 2018-02-23T19:15:12 bufferevent_socket_connect{,_hostname}() missing event callback and use ret code - When socket() failed in bufferevent_socket_connect() , the event callback should be called also in bufferevent_socket_connect_hostname(). eg. when use bufferevent_socket_connect_hostname() to resolve and connect an IP address but process have a smaller ulimit open files, socket() fails always but caller is not notified. - Make bufferevent_socket_connect()'s behavior more consistent: function return error then no callback, function return ok then error passed by event callback. Fixes: #597 Closes: #599 Closes: #600 (cherry picked from commit f7bc1337977553f5f966f13840a5f7feba2d0bd5)
Azat Khuzhin 442c7d94 2018-04-24T01:34:06 test/dns: cleanup test_bufferevent_connect_hostname() (cherry picked from commit 623ef3ccdc0aafac7ae77a723cbad6d552ff9a01)
Azat Khuzhin 7e56c8b2 2018-04-23T00:52:57 Merge branch 'pull-628' * pull-628: Give priority to the build directory headers Do not ship evconfig-private.h in dist archive Closes: #628 (cherry picked from commit a5f19422fdc91cf1e645fc318a174f33f132b9ac)
Azat Khuzhin 3ffa3ca7 2018-04-23T00:26:08 Adopt ignore rules for cmake + ninja In case we have build directory differs from source directory there will be bunch of files we should ignore, so just remove leading "/" for some or rules. And fix others. (cherry picked from commit e2874d95af584b3657eb5dc1d2e5404811dce117)
SuckShit d6326104 2018-04-20T15:48:32 Fix assert() condition in evbuffer_drain() for IOCP In the case of iocp, in the for loop above, there is a situation where: remaining == chain->off == 0 And this happens due to CHAIN_PINNED_R() case (that is used only in buffer_iocp.c) Closes: #630 (picked) (cherry picked from commit ab3224c3e66cf92779f8bd91ffe90445e636fa50)
The Gitter Badger 8886eed4 2018-04-15T23:02:05 Add Gitter badge (cherry picked from commit ba78ba9e8ba4c964dd5d14a281d7421c95d37937)
Philip Herron 29590718 2018-04-05T15:17:06 cmake: ensure windows dll's are installed as well as lib files Closes: #621 (cherry picked from commit 0fa43c99fbba6f3b1827ada98302f548206a358f)
dpayne 3bd2ce43 2018-04-03T15:43:22 Generating evdns_base_config_windows_nameservers docs on all platforms (cherry picked from commit 791e3de0c38f9f413f33addcac2d8bca68590ca6)
dpayne 80b70ee0 2018-04-03T15:17:51 Fixing doxygen docs for evdns_base_search_clear when generated on non-windows machines (cherry picked from commit 2c1562949c49febe9a4d5ec33cabe99f1f6a82e1)
Bernard Spil 894ca48a 2018-04-02T13:18:27 Fix build with LibreSSL 2.7 LibreSSL 2.7 implements OpenSSL 1.1 API except for BIO_get_init() See also: https://bugs.freebsd.org/226900 Signed-off-by: Bernard Spil <brnrd@FreeBSD.org> Closes: #617 (cherry-pick) (cherry picked from commit 28b8075400c70b2d2da2ce07e590c2ec6d11783d)
Philip Prindeville 8818c86c 2018-03-28T08:25:28 Avoid possible SEGVs in select() (in unit tests) Per the POSIX definition of select(): http://pubs.opengroup.org/onlinepubs/009696699/functions/pselect.html "Upon successful completion, the select() function may modify the object pointed to by the timout argument." If "struct timeval" pointer is a "static const", it could potentially be allocated in a RO text segment. The kernel would then try to copy back the modified value (with the time remaining) into a read-only address and SEGV. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> Closes: #614 (cherry picked from commit 33baa4e59fbf9432d77a19c6b2b45402580b79a5)
Greg Hazel b92b0792 2018-03-20T18:04:53 don't fail be_null_filter if bytes are copied Otherwise it will not reset timeouts for the IO, but other things should still works correctly. Also evbuffer_remove_buffer() could return 0, due to empty buffers, for example during flushing bufferevent, so let's count this is BEV_OK too. (cherry picked from commit 4ba48739673060baea581774992970fa46c2f813)
Greg Hazel ebfac517 2018-03-20T15:12:07 Call underlying bev ctrl GET_FD on filtered bufferevents Fixes: #611 Fixes: #610 (cherry picked from commit 4055081499cba32642dd72427a8f9d3ad7e50e79)
Azat Khuzhin 4f0f40e3 2018-02-27T21:12:14 Fix base unlocking in event_del() if event_base_set() runned in another thread Image next situation: T1: T2: event_del_() lock the event.ev_base.th_base_lock event_del_nolock_() event_set_base() unlock the event.ev_base.th_base_lock In this case we will unlock the wrong base after event_del_nolock_() returns, and deadlock is likely to happens, since event_base_set() do not check any mutexes (due to it is possible to do this only if event is not inserted anywhere). So event_del_() has to cache the base before removing the event, and cached base.th_base_lock after. (cherry picked from commit 08a0d366073eacf800027725891c2f668f2f0144)
Azat Khuzhin f45543e2 2018-02-27T21:08:35 Convert event_debug_*() helpers from macros to static functions (cherry picked from commit f0fd92f2c41fd5bf3b270ee338089dd9329d0354)
stenn 2f060c5f 2017-05-14T06:22:11 Provide Makefile variables LIBEVENT_{CFLAGS,CPPFLAGS,LDFLAGS} This will allow a parent package to specify compiler, CPP, and linker flags to a libevent built as a sub-package. Picked-from: #506 Closes: #506 (cherry picked from commit 1a448088e3aef5b6baf161eb0f6d17e18a77313c)
Azat Khuzhin 0dfabd34 2018-02-13T17:43:02 http: remove message in case !Content-Length and Connection!=close Since [1] GET can have body, and hence for every incomming connection it will print this error. [1] db483e3b002b33890fc88cadd77f6fd1fccad2d2 ("Allow bodies for GET/DELETE/OPTIONS/CONNECT") Noticed-by: BotoX (irc) Refs: #408 (cherry picked from commit cd57e38c3f77d0f6a718d9c1f2e3ead78a98bd06)
Azat Khuzhin 2b4d127d 2018-02-12T19:43:13 buffer: fix incorrect unlock of the buffer mutex (for deferred callbacks) TSAN reports: WARNING: ThreadSanitizer: unlock of an unlocked mutex (or by a wrong thread) (pid=17111) #0 pthread_mutex_unlock /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:3621 (libtsan.so.0+0x00000003b71c) #1 evbuffer_add <null> (libevent_core-2.2.so.1+0x00000000ddb6) ... Mutex M392 (0x7b0c00000f00) created at: #0 pthread_mutex_init /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:1117 (libtsan.so.0+0x0000000291af) #1 <null> <null> (libevent_pthreads-2.2.so.1+0x000000000d46) ... $ addr2line -e /lib/libevent_core-2.2.so.1 0x00000000ddb6 /src/libevent/buffer.c:1815 (discriminator 1) Introduced-in: ae2b84b2575be93d0aebba5c0b78453836f89f3c ("Replace deferred_cbs with event_callback-based implementation.") (cherry picked from commit 93913da1c4a528e0a832dc8dc163fa30f3e580d4)
Dmitry Alimov 6200b821 2018-01-15T17:30:08 Fix typos in comments (cherry picked from commit f24b28e4aff1dbc3440e283f70ac15aa7cebcc8d)
Azat Khuzhin 123362e9 2018-01-09T21:44:57 http: fix leaks in evhttp_uriencode() Fixes: #584 (cherry picked from commit 61c21492680505706cad9240c39666ee3b56a89c)
Azat Khuzhin df2ed13f 2018-01-04T19:28:59 Merge branch 'listener-immediate-close' * listener-immediate-close: test/listener: cover immediate-close logic Immediately stop trying to accept more connections if listener disabled (cherry picked from commit 416b48ba7a0b44407b7a053bd21830aa75d7162f)
Marcin Szewczyk caceb8f5 2017-12-18T14:01:15 Fixed last_with_datap description Grammar and typo fix (cherry picked from commit 88a1abe809e5d29618b722ff81ee2fb14119314f)
Azat Khuzhin 3375750a 2017-12-16T23:28:41 Fix typo in cmake because of which EVENT__SIZEOF_SIZE_T was wrong Fixes: #580 (cherry picked from commit 6e5c15d095d37036553d491b52d27fbbda08e7f2)
Greg Hazel 7d1ffe64 2017-12-02T12:53:57 CONNECT method only takes an authority (cherry picked from commit 65eb529a9f4dd886d01a9d77ce6d971de9fb1b97)
yongqing.jiao 27dee54d 2017-12-09T14:39:07 If precise_time is false, we should not set EVENT_BASE_FLAG_PRECISE_TIMER Fixes: 630f077c296de61c7b99ed83bf30de11e75e2740 ("Simple unit tests for monotonic timers") (cherry picked from commit 6cce7458d0f94e320f201eb5be94866e6918d66c)
Azat Khuzhin 42e851bb 2017-12-10T23:57:19 Merge branch 'evconnlistener-do-not-close-client-fd' Fixes: #577 * evconnlistener-do-not-close-client-fd: listener: cover closing of fd in case evconnlistener_free() called from acceptcb Revert "Fix potential fd leak in listener_read_cb()" (cherry picked from commit bc65ffc14c62c10feffefe6c3d9975ce1d1a8cd8)
Andrey Okoshkin 7fa08c4b 2017-11-29T11:13:51 Fix generation of LibeventConfig.cmake for the installation tree 'LIBEVENT_INCLUDE_DIRS' is properly initialized in 'LibeventConfig.cmake' as 'LibeventConfig.cmake.in' contains usage of 'LIBEVENT_CMAKE_DIR' and 'EVENT_INSTALL_INCLUDE_DIR' variables but not 'EVENT_CMAKE_DIR' and 'EVENT__INCLUDE_DIRS'. Related typos are fixed. (cherry picked from commit 6ee73ea9b0b15a9f4909c51e171b7799210ec26c)