Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(976)

Unified Diff: third_party/libevent/test/regress.c

Issue 412006: posix: upgrade libevent from 1.4.7 to 1.4.13 (Closed)
Patch Set: better readme Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/libevent/test/regress.c
diff --git a/third_party/libevent/test/regress.c b/third_party/libevent/test/regress.c
index e939d1d166237f2c555ac4fa8f7a598f3edc8eae..0b7517d3aa4c85b8e8afc900c0e1baa555f9f862 100644
--- a/third_party/libevent/test/regress.c
+++ b/third_party/libevent/test/regress.c
@@ -43,7 +43,7 @@
#ifndef WIN32
#include <sys/socket.h>
#include <sys/wait.h>
-#include <sys/signal.h>
+#include <signal.h>
#include <unistd.h>
#include <netdb.h>
#endif
@@ -95,6 +95,9 @@ simple_read_cb(int fd, short event, void *arg)
char buf[256];
int len;
+ if (arg == NULL)
+ return;
+
len = read(fd, buf, sizeof(buf));
if (len) {
@@ -113,6 +116,9 @@ simple_write_cb(int fd, short event, void *arg)
{
int len;
+ if (arg == NULL)
+ return;
+
len = write(fd, TEST1, strlen(TEST1) + 1);
if (len == -1)
test_ok = 0;
@@ -195,6 +201,7 @@ timeout_cb(int fd, short event, void *arg)
test_ok = 1;
}
+#ifndef WIN32
static void
signal_cb_sa(int sig)
{
@@ -209,6 +216,7 @@ signal_cb(int fd, short event, void *arg)
signal_del(ev);
test_ok = 1;
}
+#endif
struct both {
struct event ev;
@@ -304,6 +312,57 @@ cleanup_test(void)
}
static void
+test_registerfds(void)
+{
+ int i, j;
+ int pair[2];
+ struct event read_evs[512];
+ struct event write_evs[512];
+
+ struct event_base *base = event_base_new();
+
+ fprintf(stdout, "Testing register fds: ");
+
+ for (i = 0; i < 512; ++i) {
+ if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1) {
+ /* run up to the limit of file descriptors */
+ break;
+ }
+ event_set(&read_evs[i], pair[0],
+ EV_READ|EV_PERSIST, simple_read_cb, NULL);
+ event_base_set(base, &read_evs[i]);
+ event_add(&read_evs[i], NULL);
+ event_set(&write_evs[i], pair[1],
+ EV_WRITE|EV_PERSIST, simple_write_cb, NULL);
+ event_base_set(base, &write_evs[i]);
+ event_add(&write_evs[i], NULL);
+
+ /* just loop once */
+ event_base_loop(base, EVLOOP_ONCE);
+ }
+
+ /* now delete everything */
+ for (j = 0; j < i; ++j) {
+ event_del(&read_evs[j]);
+ event_del(&write_evs[j]);
+#ifndef WIN32
+ close(read_evs[j].ev_fd);
+ close(write_evs[j].ev_fd);
+#else
+ CloseHandle((HANDLE)read_evs[j].ev_fd);
+ CloseHandle((HANDLE)write_evs[j].ev_fd);
+#endif
+
+ /* just loop once */
+ event_base_loop(base, EVLOOP_ONCE);
+ }
+
+ event_base_free(base);
+
+ fprintf(stdout, "OK\n");
+}
+
+static void
test_simpleread(void)
{
struct event ev;
@@ -764,6 +823,52 @@ out:
cleanup_test();
return;
}
+
+static void
+signal_cb_swp(int sig, short event, void *arg)
+{
+ called++;
+ if (called < 5)
+ raise(sig);
+ else
+ event_loopexit(NULL);
+}
+static void
+timeout_cb_swp(int fd, short event, void *arg)
+{
+ if (called == -1) {
+ struct timeval tv = {5, 0};
+
+ called = 0;
+ evtimer_add((struct event *)arg, &tv);
+ raise(SIGUSR1);
+ return;
+ }
+ test_ok = 0;
+ event_loopexit(NULL);
+}
+
+static void
+test_signal_while_processing(void)
+{
+ struct event_base *base = event_init();
+ struct event ev, ev_timer;
+ struct timeval tv = {0, 0};
+
+ setup_test("Receiving a signal while processing other signal: ");
+
+ called = -1;
+ test_ok = 1;
+ signal_set(&ev, SIGUSR1, signal_cb_swp, NULL);
+ signal_add(&ev, NULL);
+ evtimer_set(&ev_timer, timeout_cb_swp, &ev_timer);
+ evtimer_add(&ev_timer, &tv);
+ event_dispatch();
+
+ event_base_free(base);
+ cleanup_test();
+ return;
+}
#endif
static void
@@ -1515,11 +1620,17 @@ main (int argc, char **argv)
err = WSAStartup( wVersionRequested, &wsaData );
#endif
+#ifndef WIN32
+ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
+ return (1);
+#endif
setvbuf(stdout, NULL, _IONBF, 0);
/* Initalize the event library */
global_base = event_init();
+ test_registerfds();
+
test_evutil_strtoll();
/* use the global event base and need to be called first */
@@ -1584,6 +1695,7 @@ main (int argc, char **argv)
test_signal_switchbase();
test_signal_restore();
test_signal_assert();
+ test_signal_while_processing();
#endif
return (0);

Powered by Google App Engine
This is Rietveld 408576698