300 Commits

Author SHA1 Message Date
Nick Grifka
141e37c804 test: Fix test_simpleclose for Windows platform
Replace close with evutil_closesocket
Caught with PR #1006

(cherry picked from commit 06a11929511bebaaf40c52aaf91de397b1782ba2)
2020-06-28 21:33:12 +03:00
Azat Khuzhin
1df324d4c4 Fix EV_CLOSED detection/reporting (epoll only)
- EV_CLOSED is EPOLLRDHUP in epoll
- EPOLLRDHUP reported w/o EPOLLHUP if the socket closed with shutdown(SHUT_WR)
- EPOLLRDHUP reported w/  EPOLLHUP if the socket closed with close()
  so in this case epoll backend will detect this event as error
  (EV_READ|EV_WRITE), since the epoll_ctl() will return EPOLLRDHUP with
  EPOLLHUP set, but this is not correct, let's fix this.

Fixes: #984
(cherry picked from commit 972b456bf60e9a2f550ec45a14921c06e252c793)
2020-06-28 21:33:11 +03:00
Azat Khuzhin
db2efdf55e Merge branch 'EV_CLOSED-and-EV_ET-fixes'
* EV_CLOSED-and-EV_ET-fixes:
  Avoid triggering wrong events with EV_ET set
  epoll: handle EV_ET for EV_CLOSED too
  test: cover EV_CLOSED with lots of possible scenarious
  test: rename simpleclose to simpleclose_rw (since it works via write/read)

(cherry picked from commit c10cde4c617979e951352775a9685a47bf9c6acd)
2020-06-28 21:33:11 +03:00
Azat Khuzhin
8991346df9 test: use THREAD_* wrappers over pthread* in del_notify
(cherry picked from commit 391003e9b78acff0ee5096c592fc4b601a02648d)
2020-06-28 21:22:03 +03:00
Azat Khuzhin
e85afbe3d5 Merge branch 'osx-clock'
Moves the thread into real-time scheduling class, as recommended in [1], it
fixes the separate test provided by @ygj6 [2] everywhere (github actions,
travis-ci, appveyor) under osx.

  [1]: https://developer.apple.com/library/archive/technotes/tn2169/_index.html
  [2]: dde1a6e4d0

Although even after this changes the following time-related tests failed
on travis-ci:
- no_events
- del_wait

But anyway I guess #940 can be closed, since this fixes the issue in common.

* osx-clock:
  test: Use THREAD_* wrappers in del_notify/del_wait
  test: move threads created with THREAD_START() to realtime scheduling class too
  test: put thread into real time scheduling class on osx for better latencies

Closes: #940
(cherry picked from commit a6f81aa45455c8afb69980f7026a0e706f4f9387)
2020-06-28 21:21:56 +03:00
Azat Khuzhin
87fa93a8e6
Merge remote-tracking branch 'official/pr/804'
* official/pr/804:
  Added test for evmap slot validations.
  Prevent endless loop in evmap_make_space.
  Enforce limit of NSIG signals.

(cherry picked from commit c6becb26cad8dab2668fe3d913e5ee757bade2fd)
2019-05-25 21:25:12 +03:00
John Ohl
3f893f0a6e
Add support for EV_TIMEOUT to event_base_active_by_fd
Closes: #194 (cherry-pick)
(cherry picked from commit 62df1301ca943011fa9c398323049bcddca2694d)
2019-05-25 21:25:10 +03:00
Azat Khuzhin
a45f6733bd
Revert "test: avoid regress hanging in macOS"
After we started to use kill() over raise() everything should work just
fine.

This reverts commit a86f89d333d870e6714bd28c695ba1774df3d7f5.

Fixed-in: 728c5dc1 ("Use kill() over raise() for raising the signal (fixes osx 10.14 with kqueue)")
Fixes: #747
(cherry picked from commit 14eb903ba31987d24357abd05923677d194fedae)
2019-05-25 21:25:08 +03:00
Azat Khuzhin
3db5296bb1
Use kill() over raise() for raising the signal (fixes osx 10.14 with kqueue)
On OSX 10.14+ the raise() uses pthread_kill() (verified with dtruss) and
by some reason signals that has been raised with pthread_kill() do not
received by kqueue EVFILT_SIGNAL.

While on OSX 10.11 the raise()/pthread_kill() uses plain kill() and
everything work just fine (linux also does the same, but instead of
kill() it uses tgkill())

Here is a simple reproducer that installs alarm to show that the signal
does not received by the kqueue backend:
  https://gist.github.com/azat/73638b8e3b0fa563a20dadcca9e652a1

Refs: #747
Fixes: #765
(cherry picked from commit 728c5dc11f55b4ba5f518812833eab5a2cc3d550)
2019-05-25 21:25:08 +03:00
Azat Khuzhin
e66078a043
Eliminate fd conversion warnings and introduce EVUTIL_INVALID_SOCKET (windows)
windows has intptr_t instead of regular int.

Also tt_fd_op() had been introduced, since we cannot use tt_int_op() for
comparing fd, since it is not always int.

(cherry picked from commit b29207dceee33832bb28ab103a833df6a2fd29d3)
2019-02-02 15:18:08 +03:00
Azat Khuzhin
982a7e889b
test/nonpersist_readd: use assert helpers
To debug failure under win32 in appveyor:
  https://ci.appveyor.com/project/nmathewson/libevent/builds/21559140/job/dn16qdo1j6sr497t#L1620

(cherry picked from commit 91a2f1346e80c67526261ba81c8f3b3736107bcb)
2019-02-02 15:18:06 +03:00
Azat Khuzhin
6ea1ec68ce
Merge branch 'TT_RETRIABLE'
* TT_RETRIABLE:
  Mark a lot of flacky tests with TT_RETRIABLE (for linux/win32 only)
  regress: introduce TT_RETRIABLE

Fixes: #704
(cherry picked from commit 4d2f013b5d20e674b22e5a8244f7fa63172dbdbf)
2019-02-02 15:18:05 +03:00
Azat Khuzhin
a39898f363
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)
2019-02-02 15:18:02 +03:00
Azat Khuzhin
d9d1c09e25
Notify event base if there are no more events, so it can exit without delay
Fixes: #623
(cherry picked from commit 23c2914f6b430f2c2d74c267c13ffab3dda1b325)
2019-02-02 15:17:56 +03:00
Vincent JARDIN
7cc034c37d
test: fix warning
In function ‘send_a_byte_cb’:
test/regress.c:1853:2: warning: ignoring return value of ‘write’, declared with
attribute warn_unused_result [-Wunused-result]
  (void) write(*sockp, "A", 1);

(cherry picked from commit 56010f37ae5b49881f7fd255d5c8a936e1c36909)
2019-02-02 15:13:53 +03:00
Carlo Marcelo Arenas Belón
1811a040ef
test: avoid regress hanging in macOS
a backtrace of the process without this patch :
  * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    * frame #0: 0x00007fffb1fb7d96 libsystem_kernel.dylib`kevent + 10
      frame #1: 0x0000000108ed0a58 libevent-2.2.1.dylib`kq_dispatch + 696
      frame #2: 0x0000000108ec53d8 libevent-2.2.1.dylib`event_base_loop + 696
      frame #3: 0x0000000108e1763b regress`test_fork + 1931
      frame #4: 0x0000000108e5c7ad regress`run_legacy_test_fn + 45
      frame #5: 0x0000000108e690aa regress`testcase_run_one + 858
      frame #6: 0x0000000108e6954f regress`tinytest_main + 495
      frame #7: 0x0000000108e5c94b regress`main + 171
      frame #8: 0x00007fffb1e88235 libdyld.dylib`start + 1
      frame #9: 0x00007fffb1e88235 libdyld.dylib`start + 1

Issue: #546
(cherry picked from commit a86f89d333d870e6714bd28c695ba1774df3d7f5)
2019-02-02 15:13:53 +03:00
Azat Khuzhin
23db747652
test: cover that after event_del() callback will not be scheduled again
Refs: #236
Refs: #225
(cherry picked from commit 5ff83989f30daef93a851c2162667375ed1663a5)
2019-02-02 15:13:50 +03:00
Azat Khuzhin
ebd12e6de7
Merge branch 'win32-fixes'
This patchset fixes win32 builds after some previous patches (referenced
in particular commits), and also removes some quirks for win32.

* win32-fixes:
  test: do not return void
  log/win32: fix exporting extern variable
  log-internal: missing extern "C"
  log: remove USE_GLOBAL_FOR_DEBUG_LOGGING
  cmake: Export missing symbols for win32
  cmake: eliminate EVENT_BUILDING_REGRESS_TEST, since we link with shared libs
  test: windows doesn't have WNOWAIT
  cmake: clean not used #defines from event-config.h
  cmake: add <pthread.h> only for non-win32

(cherry picked from commit d84f0205453941235b0e04729098d4329c189bba)
2019-02-02 15:13:49 +03:00
Azat Khuzhin
a0bfe2c451
Merge branch 'cmake-configure-fixes-v2'
Fixes in cmake, to make it more like configure and support some
cross-compiling.

* cmake-configure-fixes-v2:
  cmake: fix extracting of the version from git (check for number of matches)
  Detect arch4random_addrandom() existence
  Use off_t instead of ev_off_t for sendfile() (fixes android build)
  cmake: detect _GNU_SOURCE not by __GNU_LIBRARY__ only (fallback to _GNU_SOURCE)
  Check for WNOWAIT in waitpid() in runtime (not in cmake/configure)
  cmake: add <pthread.h> into CMAKE_REQUIRED_INCLUDES for sizeof(pthread_t)
  cmake: fix values for #cmakedefine
  cmake: drop duplicates from event-config template
  cmake: add value for the #cmakedefine macros (like autoconf)
  cmake: Fix checking of enum values from sysctl.h

(cherry picked from commit 5aade2d30b6c5eff226cbf7b63fda5a01987ba4f)
2019-02-02 15:13:49 +03:00
Tim Hentenaar
cb0df5cfac test/regress: cover a polling of invalid fd
Test that an event's callback is called if the fd is closed prior to being
polled for activity.

azat: make it run only for poll backend/method, and do not close fd
twice
2016-11-04 03:28:42 +03:00
Azat Khuzhin
43eb56c7c7 tests: use waitpid(..., WNOWAIT) to fix failing of main/fork under solaris
According to solaris docs:
  "One instance of a SIGCHLD signal is queued for each child process whose
  status has changed. If waitpid() returns because the status of a child
  process is available, and WNOWAIT was not specified in options, any pending
  SIGCHLD signal associated with the process ID of that child process is
  discarded. Any other pending SIGCHLD signals remain pending."

And interesting thing that it works if you add sleep(1) before waitpid(), and
also if you run with --verbose (some race or what).

But linux doesn't support WNOWAIT in waitpid() so add detection into
cmake/autotools.

Fixes: #387
Link: https://bugzilla.redhat.com/show_bug.cgi?id=840782
2016-08-11 17:08:35 +03:00
Azat Khuzhin
16d220cb6f test: replace sleeping with syncing pair in main/fork
About this syncing pair:
- read endpoint, must be blocked, to make it a checkpoint or smth like this
- write endpoint, must be nonblocking, to avoid readcb hung

Refs: #387
2016-08-11 16:18:12 +03:00
Azat Khuzhin
04fc82f7ad test: use EVUTIL_SHUT_WR 2016-03-11 01:28:43 +03:00
Nick Mathewson
4f778ab6d7 Add missing return statement to del_wait_thread so libevent can build. 2016-01-22 11:16:05 -05:00
Azat Khuzhin
5b58b709b2 test/regress: cover event_del() waiting mechanism
Since we have some issues (see refs) for changing waiting order in event_del()
I wrote this simple test, so maybe this test can explain something or at least
cover what we have before and show it will be broken.

P.S. we really need avoid such stuff like lets-test-with-sleep/usleep.

Refs: #225
Refs: #226
Refs: #236
2016-01-03 00:46:47 +03:00
Azat Khuzhin
ceddc607ca test/regress: cover existing signal callbacks and fork() + event_reinit()
Regression-for: 88640aa ("event_reinit: make signals works after fork() without
evsig_add()")
2015-12-27 09:30:10 +03:00
Azat Khuzhin
b075b81cd3 test/regress: cover signals after fork() + event_reinit()
Regression-for: ad0c237 ("event_reinit: always re-init signal's socketpair")
2015-12-27 09:29:57 +03:00
Azat Khuzhin
088d8b39f9 test/regress: main/fork: rewrite assertions by just removing event in callback
Instead of assigning some variable value (got_child), and schedule exit from
loop from that callback, just remove event for that signal, and event loop will
exit automatically when there will be no events.
2015-12-27 09:28:07 +03:00
Ed Schouten
fd36647af1 Don't use BSD u_* types.
These types are not part of POSIX. As we only use them in a small number
of places, we'd better replace them by C standard types. This makes a
larger part of the code build for CloudABI.
2015-08-25 19:15:50 +03:00
Nick Mathewson
89c1a3b7fe Fix several memory leaks in the unit tests.
Also add a comment to buffer.c about why we call
evbuffer_file_segment_free on failure to add the segment.
2014-09-18 12:40:38 -04:00
Nick Mathewson
a677b72bd6 Use evutil_weakrand() in unit tests.
(Coverity doesn't like random() or rand().  We don't care; this is
for unit tests.)

Fixes CID 1239298, 1239296, 1239295, 1239293.
2014-09-18 12:02:13 -04:00
Azat Khuzhin
b897beff6a test/regress: add simplestsignal: to track reorder bugs separately 2014-06-29 17:39:33 +04:00
Nick Mathewson
c2076824a3 Fix a c90 warning 2014-01-21 12:21:37 -05:00
Nick Mathewson
867f401f9b Fix a pile of coverity warnings in the unit tests
Most of these problems can only trigger when the tests fail, but it's
good hygiene to keep the code warning-free in any case.
2014-01-08 11:51:22 -05:00
Nick Mathewson
f9e091bf4e Merge remote-tracking branch 'asweeny86/event-count-max' 2014-01-06 12:11:30 -05:00
Andrew Sweeney
26230a2d21 Added unit test for max event counts 2014-01-05 16:30:35 -05:00
Nick Mathewson
87fa2b004a Unit tests for active_by_fd; unsupport active_by_fd(TIMEOUT)
[It turns out that event_base_active_by_fd(TIMEOUT) didn't actually
work right. Feel free to add it back in as a patch.]
2013-12-23 20:46:38 -05:00
Nick Mathewson
1104d0bee9 Fix a (failure-only) null dereference in the unit tests 2013-08-06 19:31:26 -04:00
Nick Mathewson
7080d55c49 Use void casts to suppress some "unchecked return value" warns 2013-08-06 19:28:53 -04:00
Mobai Zhang
0fa107d8cb Added event_base_get_num_events() 2013-07-02 16:01:02 -04:00
Nick Mathewson
702c9aa403 Fix a bug in the new main/event_foreach test
It wasn't making sure that the events weren't internal.
2013-04-26 19:14:05 -04:00
Nick Mathewson
d5967397b0 More unit tests for initializing common timeouts.
Try with: misformed usecs in inputs, and with initializing common timeouts
from other common timeouts.
2013-04-26 17:51:33 -04:00
Nick Mathewson
f09629eac5 A test for event_get_assignment() 2013-04-26 17:46:33 -04:00
Nick Mathewson
30ea2910d5 Unit tests for event_base_gettimeofday_cached() and event_base_update_cache_time() 2013-04-26 17:37:15 -04:00
Nick Mathewson
0b096efee5 New tests for event_base_foreach_event()
Our dump-events code had exercised this a bit, but only via the
nonlocking backend. Also, nothing was checking the "Search for a
specific event" code.
2013-04-26 13:52:51 -04:00
Nick Mathewson
a153874d18 New test for active_later->active transition on event_active
When event_active is called, an active_later event is supposed to become
active now.  We had lacked a test for that.
2013-04-26 13:49:45 -04:00
Nick Mathewson
1c3147f5e7 Add a test with an active_later event at event_base_free time. 2013-04-10 18:03:16 -04:00
Nick Mathewson
96150dd0c6 Unit test for event_remove_timer with EV_PERSIST.
Patch from dcicppin on sourceforge.
2013-02-13 11:41:11 -05:00
Nick Mathewson
e3b2e0869e Add an event_remove_timer() to remove timer on an event without deleting it 2012-11-16 16:43:17 -05:00
Nick Mathewson
5a9a014189 Fix a couple of compile warnings in the unit tests 2012-11-16 16:17:07 -05:00