]> granicus.if.org Git - libevent/commitdiff
simplify handling of environment variables for disabling backends;
authorNiels Provos <provos@gmail.com>
Thu, 29 May 2008 01:39:43 +0000 (01:39 +0000)
committerNiels Provos <provos@gmail.com>
Thu, 29 May 2008 01:39:43 +0000 (01:39 +0000)
make event_get_supported_methods obey environment variables; this
fixes make verify; problem reported by Scott Lamb.

svn:r838

ChangeLog
devpoll.c
epoll.c
event.c
evport.c
kqueue.c
poll.c
select.c
test/regress.c

index 5f268c2c94f6d0f65b462ea6d4398188f485f20a..d02f498f60d4c05fb13658e34d205d97ce1c5af1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -102,7 +102,8 @@ Changes in current version:
  o Fix connection keep-alive behavior for HTTP/1.0
  o Fix use of freed memory in event_reinit; pointed out by Peter Postma
  o constify struct timeval * where possible
-
+ o make event_get_supported_methods obey environment variables
+       
 Changes in 1.4.0:
  o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
  o demote most http warnings to debug messages
index 92e54dee30f8f98fab66fe4ee346aaa45588bf72..ccb47c29f5d257dd3f7c4a439d497d0b696fa6da 100644 (file)
--- a/devpoll.c
+++ b/devpoll.c
@@ -131,10 +131,6 @@ devpoll_init(struct event_base *base)
        struct rlimit rl;
        struct devpollop *devpollop;
 
-       /* Disable devpoll when this environment variable is set */
-       if (getenv("EVENT_NODEVPOLL"))
-               return (NULL);
-
        if (!(devpollop = mm_calloc(1, sizeof(struct devpollop))))
                return (NULL);
 
diff --git a/epoll.c b/epoll.c
index a111b22abbc02580d759e12fcfa42dbda9fd96a4..423d989820253c629334b34a1e7b100fd24b9e1d 100644 (file)
--- a/epoll.c
+++ b/epoll.c
@@ -112,10 +112,6 @@ epoll_init(struct event_base *base)
        struct rlimit rl;
        struct epollop *epollop;
 
-       /* Disable epollueue when this environment variable is set */
-       if (getenv("EVENT_NOEPOLL"))
-               return (NULL);
-
        if (getrlimit(RLIMIT_NOFILE, &rl) == 0 &&
            rl.rlim_cur != RLIM_INFINITY) {
                /*
diff --git a/event.c b/event.c
index 47fef92c81de6f8cf0173fe480091ac69001da3c..da2b6f3dcab5c2627d397769e379d76694a59dff 100644 (file)
--- a/event.c
+++ b/event.c
@@ -51,6 +51,7 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#include <ctype.h>
 #include <errno.h>
 #include <signal.h>
 #include <string.h>
@@ -208,6 +209,19 @@ event_config_is_avoided_method(struct event_config *cfg, const char *method)
        return (0);
 }
 
+static int
+event_is_method_disabled(const char *name)
+{
+       char environment[64];
+       int i;
+
+       evutil_snprintf(environment, sizeof(environment), "EVENT_NO%s", name);
+       for (i = 8; environment[i] != '\0'; ++i)
+               environment[i] = toupper(environment[i]);
+       return (getenv(environment) != NULL);
+       
+}
+
 struct event_base *
 event_base_new_with_config(struct event_config *cfg)
 {
@@ -238,6 +252,10 @@ event_base_new_with_config(struct event_config *cfg)
                                continue;
                }
 
+               /* also obey the environment variables */
+               if (event_is_method_disabled(eventops[i]->name))
+                       continue;
+
                base->evsel = eventops[i];
 
                base->evbase = base->evsel->init(base);
@@ -247,8 +265,7 @@ event_base_new_with_config(struct event_config *cfg)
                event_errx(1, "%s: no event mechanism available", __func__);
 
        if (getenv("EVENT_SHOW_METHOD")) 
-               event_msgx("libevent using: %s\n",
-                          base->evsel->name);
+               event_msgx("libevent using: %s", base->evsel->name);
 
        /* allocate a single active event queue */
        event_base_priority_init(base, 1);
@@ -356,12 +373,12 @@ event_get_supported_methods(void)
        const char **tmp;
        int i = 0, k;
 
-       if (methods != NULL)
-               return (methods);
-
        /* count all methods */
-       for (method = &eventops[0]; *method != NULL; ++method)
+       for (method = &eventops[0]; *method != NULL; ++method) {
+               if (event_is_method_disabled((*method)->name))
+                       continue;
                ++i;
+       }
 
        /* allocate one more than we need for the NULL pointer */
        tmp = mm_malloc((i + 1) * sizeof(char *));
@@ -369,10 +386,16 @@ event_get_supported_methods(void)
                return (NULL);
 
        /* populate the array with the supported methods */
-       for (k = 0; k < i; ++k)
-               tmp[k] = eventops[k]->name;
+       for (k = 0, i = 0; eventops[k] != NULL; ++k) {
+               if (event_is_method_disabled(eventops[k]->name))
+                       continue;
+               tmp[i++] = eventops[k]->name;
+       }
        tmp[i] = NULL;
 
+       if (methods != NULL)
+               mm_free(methods);
+
        methods = tmp;
        
        return (methods);
index d2fe3a8ce245773aba040adaacaef0bf8513c77b..fc396baa4399531d6353233d25315c1c74a09392 100644 (file)
--- a/evport.c
+++ b/evport.c
@@ -141,11 +141,6 @@ evport_init(struct event_base *base)
 {
        struct evport_data *evpd;
        int i;
-       /*
-        * Disable event ports when this environment variable is set 
-        */
-       if (getenv("EVENT_NOEVPORT"))
-               return (NULL);
 
        if (!(evpd = mm_calloc(1, sizeof(struct evport_data))))
                return (NULL);
index 586706516ab210d34f06b074d9b91a87f254da14..b213be02e1fac4003da5d7399d3d02a1bc616d00 100644 (file)
--- a/kqueue.c
+++ b/kqueue.c
@@ -99,10 +99,6 @@ kq_init(struct event_base *base)
        int kq;
        struct kqop *kqueueop;
 
-       /* Disable kqueue when this environment variable is set */
-       if (getenv("EVENT_NOKQUEUE"))
-               return (NULL);
-
        if (!(kqueueop = mm_calloc(1, sizeof(struct kqop))))
                return (NULL);
 
diff --git a/poll.c b/poll.c
index 0cc37f028dd19e0a6b10b7b21ce7443a23e522d8..7b2270bc1a10c25d182b8e7863c7ffe8fcacfc2d 100644 (file)
--- a/poll.c
+++ b/poll.c
@@ -87,10 +87,6 @@ poll_init(struct event_base *base)
 {
        struct pollop *pollop;
 
-       /* Disable poll when this environment variable is set */
-       if (getenv("EVENT_NOPOLL"))
-               return (NULL);
-
        if (!(pollop = mm_calloc(1, sizeof(struct pollop))))
                return (NULL);
 
index e0848ee3bb154a28f647ddaf036dabba97f6ef35..0df99e58606793a21ee5996d46cc41e36e7f0ddb 100644 (file)
--- a/select.c
+++ b/select.c
@@ -94,10 +94,6 @@ select_init(struct event_base *base)
 {
        struct selectop *sop;
 
-       /* Disable select when this environment variable is set */
-       if (getenv("EVENT_NOSELECT"))
-               return (NULL);
-
        if (!(sop = mm_calloc(1, sizeof(struct selectop))))
                return (NULL);
 
index 6850aeca9ca392fae0bbe2e47b7d959b473715ba..ca83e879b6d36ee92c5fc7d07916c0dffb1eff9d 100644 (file)
@@ -495,7 +495,7 @@ test_fork(void)
        if ((pid = fork()) == 0) {
                /* in the child */
                if (event_reinit(current_base) == -1) {
-                       fprintf(stderr, "FAILED (reinit)\n");
+                       fprintf(stdout, "FAILED (reinit)\n");
                        exit(1);
                }
 
@@ -515,12 +515,12 @@ test_fork(void)
        write(pair[0], TEST1, strlen(TEST1)+1);
 
        if (waitpid(pid, &status, 0) == -1) {
-               fprintf(stderr, "FAILED (fork)\n");
+               fprintf(stdout, "FAILED (fork)\n");
                exit(1);
        }
        
        if (WEXITSTATUS(status) != 76) {
-               fprintf(stderr, "FAILED (exit): %d\n", WEXITSTATUS(status));
+               fprintf(stdout, "FAILED (exit): %d\n", WEXITSTATUS(status));
                exit(1);
        }
 
@@ -1971,7 +1971,7 @@ rpc_test(void)
 
        gettimeofday(&tv_end, NULL);
        evutil_timersub(&tv_end, &tv_start, &tv_end);
-       fprintf(stderr, "(%.1f us/add) ",
+       fprintf(stdout, "(%.1f us/add) ",
            (float)tv_end.tv_sec/(float)i * 1000000.0 +
            tv_end.tv_usec / (float)i);
 
@@ -2109,16 +2109,16 @@ test_methods(void)
        const char *backend;
        int n_methods = 0;
 
-       fprintf(stderr, "Testing supported methods: ");
+       fprintf(stdout, "Testing supported methods: ");
 
        if (methods == NULL) {
-               fprintf(stderr, "FAILED\n");
+               fprintf(stdout, "FAILED\n");
                exit(1);
        }
 
        backend = methods[0];
        while (*methods != NULL) {
-               fprintf(stderr, "%s ", *methods);
+               fprintf(stdout, "%s ", *methods);
                ++methods;
                ++n_methods;
        }
@@ -2135,19 +2135,19 @@ test_methods(void)
 
        base = event_base_new_with_config(cfg);
        if (base == NULL) {
-               fprintf(stderr, "FAILED\n");
+               fprintf(stdout, "FAILED\n");
                exit(1);
        }
 
        if (strcmp(backend, event_base_get_method(base)) == 0) {
-               fprintf(stderr, "FAILED\n");
+               fprintf(stdout, "FAILED\n");
                exit(1);
        }
 
        event_base_free(base);
        event_config_free(cfg);
 done:
-       fprintf(stderr, "OK\n");
+       fprintf(stdout, "OK\n");
 }