mirror of
https://github.com/libevent/libevent.git
synced 2025-01-31 09:12:55 +08:00
simplify handling of environment variables for disabling backends;
make event_get_supported_methods obey environment variables; this fixes make verify; problem reported by Scott Lamb. svn:r838
This commit is contained in:
parent
8b66f1bd4d
commit
2deb3ce061
@ -102,6 +102,7 @@ Changes in current version:
|
|||||||
o Fix connection keep-alive behavior for HTTP/1.0
|
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 Fix use of freed memory in event_reinit; pointed out by Peter Postma
|
||||||
o constify struct timeval * where possible
|
o constify struct timeval * where possible
|
||||||
|
o make event_get_supported_methods obey environment variables
|
||||||
|
|
||||||
Changes in 1.4.0:
|
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 allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
|
||||||
|
@ -131,10 +131,6 @@ devpoll_init(struct event_base *base)
|
|||||||
struct rlimit rl;
|
struct rlimit rl;
|
||||||
struct devpollop *devpollop;
|
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))))
|
if (!(devpollop = mm_calloc(1, sizeof(struct devpollop))))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
4
epoll.c
4
epoll.c
@ -112,10 +112,6 @@ epoll_init(struct event_base *base)
|
|||||||
struct rlimit rl;
|
struct rlimit rl;
|
||||||
struct epollop *epollop;
|
struct epollop *epollop;
|
||||||
|
|
||||||
/* Disable epollueue when this environment variable is set */
|
|
||||||
if (getenv("EVENT_NOEPOLL"))
|
|
||||||
return (NULL);
|
|
||||||
|
|
||||||
if (getrlimit(RLIMIT_NOFILE, &rl) == 0 &&
|
if (getrlimit(RLIMIT_NOFILE, &rl) == 0 &&
|
||||||
rl.rlim_cur != RLIM_INFINITY) {
|
rl.rlim_cur != RLIM_INFINITY) {
|
||||||
/*
|
/*
|
||||||
|
39
event.c
39
event.c
@ -51,6 +51,7 @@
|
|||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -208,6 +209,19 @@ event_config_is_avoided_method(struct event_config *cfg, const char *method)
|
|||||||
return (0);
|
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 *
|
struct event_base *
|
||||||
event_base_new_with_config(struct event_config *cfg)
|
event_base_new_with_config(struct event_config *cfg)
|
||||||
{
|
{
|
||||||
@ -238,6 +252,10 @@ event_base_new_with_config(struct event_config *cfg)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* also obey the environment variables */
|
||||||
|
if (event_is_method_disabled(eventops[i]->name))
|
||||||
|
continue;
|
||||||
|
|
||||||
base->evsel = eventops[i];
|
base->evsel = eventops[i];
|
||||||
|
|
||||||
base->evbase = base->evsel->init(base);
|
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__);
|
event_errx(1, "%s: no event mechanism available", __func__);
|
||||||
|
|
||||||
if (getenv("EVENT_SHOW_METHOD"))
|
if (getenv("EVENT_SHOW_METHOD"))
|
||||||
event_msgx("libevent using: %s\n",
|
event_msgx("libevent using: %s", base->evsel->name);
|
||||||
base->evsel->name);
|
|
||||||
|
|
||||||
/* allocate a single active event queue */
|
/* allocate a single active event queue */
|
||||||
event_base_priority_init(base, 1);
|
event_base_priority_init(base, 1);
|
||||||
@ -356,12 +373,12 @@ event_get_supported_methods(void)
|
|||||||
const char **tmp;
|
const char **tmp;
|
||||||
int i = 0, k;
|
int i = 0, k;
|
||||||
|
|
||||||
if (methods != NULL)
|
|
||||||
return (methods);
|
|
||||||
|
|
||||||
/* count all 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;
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
/* allocate one more than we need for the NULL pointer */
|
/* allocate one more than we need for the NULL pointer */
|
||||||
tmp = mm_malloc((i + 1) * sizeof(char *));
|
tmp = mm_malloc((i + 1) * sizeof(char *));
|
||||||
@ -369,10 +386,16 @@ event_get_supported_methods(void)
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
/* populate the array with the supported methods */
|
/* populate the array with the supported methods */
|
||||||
for (k = 0; k < i; ++k)
|
for (k = 0, i = 0; eventops[k] != NULL; ++k) {
|
||||||
tmp[k] = eventops[k]->name;
|
if (event_is_method_disabled(eventops[k]->name))
|
||||||
|
continue;
|
||||||
|
tmp[i++] = eventops[k]->name;
|
||||||
|
}
|
||||||
tmp[i] = NULL;
|
tmp[i] = NULL;
|
||||||
|
|
||||||
|
if (methods != NULL)
|
||||||
|
mm_free(methods);
|
||||||
|
|
||||||
methods = tmp;
|
methods = tmp;
|
||||||
|
|
||||||
return (methods);
|
return (methods);
|
||||||
|
5
evport.c
5
evport.c
@ -141,11 +141,6 @@ evport_init(struct event_base *base)
|
|||||||
{
|
{
|
||||||
struct evport_data *evpd;
|
struct evport_data *evpd;
|
||||||
int i;
|
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))))
|
if (!(evpd = mm_calloc(1, sizeof(struct evport_data))))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
4
kqueue.c
4
kqueue.c
@ -99,10 +99,6 @@ kq_init(struct event_base *base)
|
|||||||
int kq;
|
int kq;
|
||||||
struct kqop *kqueueop;
|
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))))
|
if (!(kqueueop = mm_calloc(1, sizeof(struct kqop))))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
4
poll.c
4
poll.c
@ -87,10 +87,6 @@ poll_init(struct event_base *base)
|
|||||||
{
|
{
|
||||||
struct pollop *pollop;
|
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))))
|
if (!(pollop = mm_calloc(1, sizeof(struct pollop))))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
4
select.c
4
select.c
@ -94,10 +94,6 @@ select_init(struct event_base *base)
|
|||||||
{
|
{
|
||||||
struct selectop *sop;
|
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))))
|
if (!(sop = mm_calloc(1, sizeof(struct selectop))))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
@ -495,7 +495,7 @@ test_fork(void)
|
|||||||
if ((pid = fork()) == 0) {
|
if ((pid = fork()) == 0) {
|
||||||
/* in the child */
|
/* in the child */
|
||||||
if (event_reinit(current_base) == -1) {
|
if (event_reinit(current_base) == -1) {
|
||||||
fprintf(stderr, "FAILED (reinit)\n");
|
fprintf(stdout, "FAILED (reinit)\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -515,12 +515,12 @@ test_fork(void)
|
|||||||
write(pair[0], TEST1, strlen(TEST1)+1);
|
write(pair[0], TEST1, strlen(TEST1)+1);
|
||||||
|
|
||||||
if (waitpid(pid, &status, 0) == -1) {
|
if (waitpid(pid, &status, 0) == -1) {
|
||||||
fprintf(stderr, "FAILED (fork)\n");
|
fprintf(stdout, "FAILED (fork)\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WEXITSTATUS(status) != 76) {
|
if (WEXITSTATUS(status) != 76) {
|
||||||
fprintf(stderr, "FAILED (exit): %d\n", WEXITSTATUS(status));
|
fprintf(stdout, "FAILED (exit): %d\n", WEXITSTATUS(status));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1971,7 +1971,7 @@ rpc_test(void)
|
|||||||
|
|
||||||
gettimeofday(&tv_end, NULL);
|
gettimeofday(&tv_end, NULL);
|
||||||
evutil_timersub(&tv_end, &tv_start, &tv_end);
|
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 +
|
(float)tv_end.tv_sec/(float)i * 1000000.0 +
|
||||||
tv_end.tv_usec / (float)i);
|
tv_end.tv_usec / (float)i);
|
||||||
|
|
||||||
@ -2109,16 +2109,16 @@ test_methods(void)
|
|||||||
const char *backend;
|
const char *backend;
|
||||||
int n_methods = 0;
|
int n_methods = 0;
|
||||||
|
|
||||||
fprintf(stderr, "Testing supported methods: ");
|
fprintf(stdout, "Testing supported methods: ");
|
||||||
|
|
||||||
if (methods == NULL) {
|
if (methods == NULL) {
|
||||||
fprintf(stderr, "FAILED\n");
|
fprintf(stdout, "FAILED\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
backend = methods[0];
|
backend = methods[0];
|
||||||
while (*methods != NULL) {
|
while (*methods != NULL) {
|
||||||
fprintf(stderr, "%s ", *methods);
|
fprintf(stdout, "%s ", *methods);
|
||||||
++methods;
|
++methods;
|
||||||
++n_methods;
|
++n_methods;
|
||||||
}
|
}
|
||||||
@ -2135,19 +2135,19 @@ test_methods(void)
|
|||||||
|
|
||||||
base = event_base_new_with_config(cfg);
|
base = event_base_new_with_config(cfg);
|
||||||
if (base == NULL) {
|
if (base == NULL) {
|
||||||
fprintf(stderr, "FAILED\n");
|
fprintf(stdout, "FAILED\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(backend, event_base_get_method(base)) == 0) {
|
if (strcmp(backend, event_base_get_method(base)) == 0) {
|
||||||
fprintf(stderr, "FAILED\n");
|
fprintf(stdout, "FAILED\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
event_base_free(base);
|
event_base_free(base);
|
||||||
event_config_free(cfg);
|
event_config_free(cfg);
|
||||||
done:
|
done:
|
||||||
fprintf(stderr, "OK\n");
|
fprintf(stdout, "OK\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user