mirror of
https://github.com/libevent/libevent.git
synced 2025-01-31 09:12:55 +08:00
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)
This commit is contained in:
parent
cc554d87ce
commit
ebd12e6de7
@ -476,7 +476,9 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT EVENT__DISABLE_THREAD_SUPPORT)
|
if (NOT EVENT__DISABLE_THREAD_SUPPORT)
|
||||||
|
if (NOT WIN32)
|
||||||
list(APPEND CMAKE_EXTRA_INCLUDE_FILES pthread.h)
|
list(APPEND CMAKE_EXTRA_INCLUDE_FILES pthread.h)
|
||||||
|
endif()
|
||||||
CHECK_TYPE_SIZE(pthread_t EVENT__SIZEOF_PTHREAD_T)
|
CHECK_TYPE_SIZE(pthread_t EVENT__SIZEOF_PTHREAD_T)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -497,7 +499,6 @@ CHECK_TYPE_SIZE("void *" EVENT__SIZEOF_VOID_P)
|
|||||||
# - ellzey
|
# - ellzey
|
||||||
|
|
||||||
#CHECK_FILE_OFFSET_BITS()
|
#CHECK_FILE_OFFSET_BITS()
|
||||||
#set(EVENT___FILE_OFFSET_BITS _FILE_OFFSET_BITS)
|
|
||||||
|
|
||||||
# Verify kqueue works with pipes.
|
# Verify kqueue works with pipes.
|
||||||
if (EVENT__HAVE_KQUEUE)
|
if (EVENT__HAVE_KQUEUE)
|
||||||
@ -982,19 +983,11 @@ if (NOT EVENT__DISABLE_TESTS)
|
|||||||
|
|
||||||
add_executable(regress ${SRC_REGRESS})
|
add_executable(regress ${SRC_REGRESS})
|
||||||
|
|
||||||
# While building the test suite we don't want the visibility
|
|
||||||
# header trying to "dllimport" the symbols on windows (it
|
|
||||||
# generates a ton of warnings due to different link
|
|
||||||
# attributes for all of the symbols)
|
|
||||||
set_target_properties(regress
|
|
||||||
PROPERTIES COMPILE_DEFINITIONS
|
|
||||||
"EVENT_BUILDING_REGRESS_TEST=1")
|
|
||||||
|
|
||||||
target_link_libraries(regress
|
target_link_libraries(regress
|
||||||
${LIB_APPS}
|
${LIB_APPS}
|
||||||
${LIB_PLATFORM}
|
${LIB_PLATFORM}
|
||||||
event_core_shared
|
event_core_shared
|
||||||
event_extra_static)
|
event_extra_shared)
|
||||||
if (NOT EVENT__DISABLE_OPENSSL)
|
if (NOT EVENT__DISABLE_OPENSSL)
|
||||||
target_link_libraries(regress event_openssl_shared)
|
target_link_libraries(regress event_openssl_shared)
|
||||||
endif()
|
endif()
|
||||||
|
@ -336,9 +336,6 @@
|
|||||||
/* Define to appropriate substitue if compiler doesnt have __func__ */
|
/* Define to appropriate substitue if compiler doesnt have __func__ */
|
||||||
#define EVENT____func__ __FUNCTION__
|
#define EVENT____func__ __FUNCTION__
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
|
||||||
/* #undef EVENT__const */
|
|
||||||
|
|
||||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||||
#ifndef _EVENT___cplusplus
|
#ifndef _EVENT___cplusplus
|
||||||
|
@ -480,22 +480,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef __THESE_ARE_NOT_CONFIG_H_THINGS_THEY_ARE_DASH_D_THINGS__
|
|
||||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
|
||||||
/* Ellzey is not satisfied */
|
|
||||||
#define EVENT___FILE_OFFSET_BITS @EVENT___FILE_OFFSET_BITS@
|
|
||||||
|
|
||||||
/* Define for large files, on AIX-style hosts. */
|
|
||||||
#define @_LARGE_FILES@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WhAT_DOES_THIS_EVEN_DO_
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
|
||||||
/* lolwut? - ellzey */
|
|
||||||
#undef EVENT__const
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
@ -185,14 +185,23 @@ EVLOCK_TRY_LOCK_(void *lock)
|
|||||||
#elif ! defined(EVENT__DISABLE_THREAD_SUPPORT)
|
#elif ! defined(EVENT__DISABLE_THREAD_SUPPORT)
|
||||||
|
|
||||||
unsigned long evthreadimpl_get_id_(void);
|
unsigned long evthreadimpl_get_id_(void);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int evthreadimpl_is_lock_debugging_enabled_(void);
|
int evthreadimpl_is_lock_debugging_enabled_(void);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
void *evthreadimpl_lock_alloc_(unsigned locktype);
|
void *evthreadimpl_lock_alloc_(unsigned locktype);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
void evthreadimpl_lock_free_(void *lock, unsigned locktype);
|
void evthreadimpl_lock_free_(void *lock, unsigned locktype);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int evthreadimpl_lock_lock_(unsigned mode, void *lock);
|
int evthreadimpl_lock_lock_(unsigned mode, void *lock);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int evthreadimpl_lock_unlock_(unsigned mode, void *lock);
|
int evthreadimpl_lock_unlock_(unsigned mode, void *lock);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
void *evthreadimpl_cond_alloc_(unsigned condtype);
|
void *evthreadimpl_cond_alloc_(unsigned condtype);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
void evthreadimpl_cond_free_(void *cond);
|
void evthreadimpl_cond_free_(void *cond);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int evthreadimpl_cond_signal_(void *cond, int broadcast);
|
int evthreadimpl_cond_signal_(void *cond, int broadcast);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int evthreadimpl_cond_wait_(void *cond, void *lock, const struct timeval *tv);
|
int evthreadimpl_cond_wait_(void *cond, void *lock, const struct timeval *tv);
|
||||||
int evthreadimpl_locking_enabled_(void);
|
int evthreadimpl_locking_enabled_(void);
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
defined(event_core_shared_EXPORTS) || \
|
defined(event_core_shared_EXPORTS) || \
|
||||||
defined(event_pthreads_shared_EXPORTS) || \
|
defined(event_pthreads_shared_EXPORTS) || \
|
||||||
defined(event_openssl_shared_EXPORTS)
|
defined(event_openssl_shared_EXPORTS)
|
||||||
|
|
||||||
# if defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
|
# if defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
|
||||||
# define EVENT2_EXPORT_SYMBOL __global
|
# define EVENT2_EXPORT_SYMBOL __global
|
||||||
# elif defined __GNUC__
|
# elif defined __GNUC__
|
||||||
@ -43,12 +44,21 @@
|
|||||||
# else
|
# else
|
||||||
# define EVENT2_EXPORT_SYMBOL /* unknown compiler */
|
# define EVENT2_EXPORT_SYMBOL /* unknown compiler */
|
||||||
# endif
|
# endif
|
||||||
#else
|
|
||||||
# if defined(_MSC_VER) && !defined(EVENT_BUILDING_REGRESS_TEST)
|
#else /* event_*_EXPORTS */
|
||||||
|
|
||||||
|
# if defined(_MSC_VER)
|
||||||
# define EVENT2_EXPORT_SYMBOL extern __declspec(dllimport)
|
# define EVENT2_EXPORT_SYMBOL extern __declspec(dllimport)
|
||||||
# else
|
# else
|
||||||
# define EVENT2_EXPORT_SYMBOL
|
# define EVENT2_EXPORT_SYMBOL
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
#endif /* event_*_EXPORTS */
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# define EVENT2_EXPORT_SYMBOL_DECL __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
# define EVENT2_EXPORT_SYMBOL_DECL extern
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* EVENT2_VISIBILITY_H_INCLUDED_ */
|
#endif /* EVENT2_VISIBILITY_H_INCLUDED_ */
|
||||||
|
@ -92,6 +92,7 @@ struct event_iocp_port {
|
|||||||
HANDLE *shutdownSemaphore;
|
HANDLE *shutdownSemaphore;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
const struct win32_extension_fns *event_get_win32_extension_fns_(void);
|
const struct win32_extension_fns *event_get_win32_extension_fns_(void);
|
||||||
#else
|
#else
|
||||||
/* Dummy definition so we can test-compile more things on unix. */
|
/* Dummy definition so we can test-compile more things on unix. */
|
||||||
@ -106,12 +107,14 @@ struct event_overlapped {
|
|||||||
@param cb The callback that should be invoked once the IO operation has
|
@param cb The callback that should be invoked once the IO operation has
|
||||||
finished.
|
finished.
|
||||||
*/
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
void event_overlapped_init_(struct event_overlapped *, iocp_callback cb);
|
void event_overlapped_init_(struct event_overlapped *, iocp_callback cb);
|
||||||
|
|
||||||
/** Allocate and return a new evbuffer that supports overlapped IO on a given
|
/** Allocate and return a new evbuffer that supports overlapped IO on a given
|
||||||
socket. The socket must be associated with an IO completion port using
|
socket. The socket must be associated with an IO completion port using
|
||||||
event_iocp_port_associate_.
|
event_iocp_port_associate_.
|
||||||
*/
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
struct evbuffer *evbuffer_overlapped_new_(evutil_socket_t fd);
|
struct evbuffer *evbuffer_overlapped_new_(evutil_socket_t fd);
|
||||||
|
|
||||||
/** XXXX Document (nickm) */
|
/** XXXX Document (nickm) */
|
||||||
@ -131,6 +134,7 @@ void evbuffer_overlapped_set_fd_(struct evbuffer *buf, evutil_socket_t fd);
|
|||||||
@param ol Overlapped object with associated completion callback.
|
@param ol Overlapped object with associated completion callback.
|
||||||
@return 0 on success, -1 on error.
|
@return 0 on success, -1 on error.
|
||||||
*/
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int evbuffer_launch_read_(struct evbuffer *buf, size_t n, struct event_overlapped *ol);
|
int evbuffer_launch_read_(struct evbuffer *buf, size_t n, struct event_overlapped *ol);
|
||||||
|
|
||||||
/** Start writing data from the start of an evbuffer.
|
/** Start writing data from the start of an evbuffer.
|
||||||
@ -145,21 +149,26 @@ int evbuffer_launch_read_(struct evbuffer *buf, size_t n, struct event_overlappe
|
|||||||
@param ol Overlapped object with associated completion callback.
|
@param ol Overlapped object with associated completion callback.
|
||||||
@return 0 on success, -1 on error.
|
@return 0 on success, -1 on error.
|
||||||
*/
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int evbuffer_launch_write_(struct evbuffer *buf, ev_ssize_t n, struct event_overlapped *ol);
|
int evbuffer_launch_write_(struct evbuffer *buf, ev_ssize_t n, struct event_overlapped *ol);
|
||||||
|
|
||||||
/** XXX document */
|
/** XXX document */
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
void evbuffer_commit_read_(struct evbuffer *, ev_ssize_t);
|
void evbuffer_commit_read_(struct evbuffer *, ev_ssize_t);
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
void evbuffer_commit_write_(struct evbuffer *, ev_ssize_t);
|
void evbuffer_commit_write_(struct evbuffer *, ev_ssize_t);
|
||||||
|
|
||||||
/** Create an IOCP, and launch its worker threads. Internal use only.
|
/** Create an IOCP, and launch its worker threads. Internal use only.
|
||||||
|
|
||||||
This interface is unstable, and will change.
|
This interface is unstable, and will change.
|
||||||
*/
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
struct event_iocp_port *event_iocp_port_launch_(int n_cpus);
|
struct event_iocp_port *event_iocp_port_launch_(int n_cpus);
|
||||||
|
|
||||||
/** Associate a file descriptor with an iocp, such that overlapped IO on the
|
/** Associate a file descriptor with an iocp, such that overlapped IO on the
|
||||||
fd will happen on one of the iocp's worker threads.
|
fd will happen on one of the iocp's worker threads.
|
||||||
*/
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int event_iocp_port_associate_(struct event_iocp_port *port, evutil_socket_t fd,
|
int event_iocp_port_associate_(struct event_iocp_port *port, evutil_socket_t fd,
|
||||||
ev_uintptr_t key);
|
ev_uintptr_t key);
|
||||||
|
|
||||||
@ -169,15 +178,18 @@ int event_iocp_port_associate_(struct event_iocp_port *port, evutil_socket_t fd,
|
|||||||
0. Otherwise, return -1. If you get a -1 return value, it is safe to call
|
0. Otherwise, return -1. If you get a -1 return value, it is safe to call
|
||||||
this function again.
|
this function again.
|
||||||
*/
|
*/
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int event_iocp_shutdown_(struct event_iocp_port *port, long waitMsec);
|
int event_iocp_shutdown_(struct event_iocp_port *port, long waitMsec);
|
||||||
|
|
||||||
/* FIXME document. */
|
/* FIXME document. */
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
int event_iocp_activate_overlapped_(struct event_iocp_port *port,
|
int event_iocp_activate_overlapped_(struct event_iocp_port *port,
|
||||||
struct event_overlapped *o,
|
struct event_overlapped *o,
|
||||||
ev_uintptr_t key, ev_uint32_t n_bytes);
|
ev_uintptr_t key, ev_uint32_t n_bytes);
|
||||||
|
|
||||||
struct event_base;
|
struct event_base;
|
||||||
/* FIXME document. */
|
/* FIXME document. */
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
struct event_iocp_port *event_base_get_iocp_(struct event_base *base);
|
struct event_iocp_port *event_base_get_iocp_(struct event_base *base);
|
||||||
|
|
||||||
/* FIXME document. */
|
/* FIXME document. */
|
||||||
@ -186,6 +198,7 @@ int event_base_start_iocp_(struct event_base *base, int n_cpus);
|
|||||||
void event_base_stop_iocp_(struct event_base *base);
|
void event_base_stop_iocp_(struct event_base *base);
|
||||||
|
|
||||||
/* FIXME document. */
|
/* FIXME document. */
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
struct bufferevent *bufferevent_async_new_(struct event_base *base,
|
struct bufferevent *bufferevent_async_new_(struct event_base *base,
|
||||||
evutil_socket_t fd, int options);
|
evutil_socket_t fd, int options);
|
||||||
|
|
||||||
|
@ -29,6 +29,10 @@
|
|||||||
|
|
||||||
#include "event2/util.h"
|
#include "event2/util.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define EV_CHECK_FMT(a,b) __attribute__((format(printf, a, b)))
|
#define EV_CHECK_FMT(a,b) __attribute__((format(printf, a, b)))
|
||||||
#define EV_NORETURN __attribute__((noreturn))
|
#define EV_NORETURN __attribute__((noreturn))
|
||||||
@ -39,21 +43,15 @@
|
|||||||
|
|
||||||
#define EVENT_ERR_ABORT_ ((int)0xdeaddead)
|
#define EVENT_ERR_ABORT_ ((int)0xdeaddead)
|
||||||
|
|
||||||
#define USE_GLOBAL_FOR_DEBUG_LOGGING
|
|
||||||
|
|
||||||
#if !defined(EVENT__DISABLE_DEBUG_MODE) || defined(USE_DEBUG)
|
#if !defined(EVENT__DISABLE_DEBUG_MODE) || defined(USE_DEBUG)
|
||||||
#define EVENT_DEBUG_LOGGING_ENABLED
|
#define EVENT_DEBUG_LOGGING_ENABLED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EVENT_DEBUG_LOGGING_ENABLED
|
#ifdef EVENT_DEBUG_LOGGING_ENABLED
|
||||||
#ifdef USE_GLOBAL_FOR_DEBUG_LOGGING
|
EVENT2_EXPORT_SYMBOL_DECL
|
||||||
EVENT2_EXPORT_SYMBOL
|
ev_uint32_t event_debug_logging_mask_;
|
||||||
extern ev_uint32_t event_debug_logging_mask_;
|
|
||||||
#define event_debug_get_logging_mask_() (event_debug_logging_mask_)
|
#define event_debug_get_logging_mask_() (event_debug_logging_mask_)
|
||||||
#else
|
#else
|
||||||
ev_uint32_t event_debug_get_logging_mask_(void);
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#define event_debug_get_logging_mask_() (0)
|
#define event_debug_get_logging_mask_() (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -90,4 +88,8 @@ void event_logv_(int severity, const char *errstr, const char *fmt, va_list ap)
|
|||||||
|
|
||||||
#undef EV_CHECK_FMT
|
#undef EV_CHECK_FMT
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* LOG_INTERNAL_H_INCLUDED_ */
|
||||||
|
10
log.c
10
log.c
@ -69,16 +69,8 @@ static event_fatal_cb fatal_fn = NULL;
|
|||||||
#define DEFAULT_MASK 0
|
#define DEFAULT_MASK 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_GLOBAL_FOR_DEBUG_LOGGING
|
EVENT2_EXPORT_SYMBOL
|
||||||
ev_uint32_t event_debug_logging_mask_ = DEFAULT_MASK;
|
ev_uint32_t event_debug_logging_mask_ = DEFAULT_MASK;
|
||||||
#else
|
|
||||||
static ev_uint32_t event_debug_logging_mask_ = DEFAULT_MASK;
|
|
||||||
ev_uint32_t
|
|
||||||
event_debug_get_logging_mask_(void)
|
|
||||||
{
|
|
||||||
return event_debug_logging_mask_;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* EVENT_DEBUG_LOGGING_ENABLED */
|
#endif /* EVENT_DEBUG_LOGGING_ENABLED */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -848,11 +848,34 @@ simple_child_read_cb(evutil_socket_t fd, short event, void *arg)
|
|||||||
|
|
||||||
called++;
|
called++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define TEST_FORK_EXIT_SUCCESS 76
|
||||||
|
static void fork_wait_check(int pid)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
|
||||||
|
TT_BLATHER(("Before waitpid"));
|
||||||
|
|
||||||
|
#ifdef WNOWAIT
|
||||||
|
if ((waitpid(pid, &status, WNOWAIT) == -1 && errno == EINVAL) &&
|
||||||
|
#else
|
||||||
|
if (
|
||||||
|
#endif
|
||||||
|
waitpid(pid, &status, 0) == -1) {
|
||||||
|
perror("waitpid");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
TT_BLATHER(("After waitpid"));
|
||||||
|
|
||||||
|
if (WEXITSTATUS(status) != TEST_FORK_EXIT_SUCCESS) {
|
||||||
|
fprintf(stdout, "FAILED (exit): %d\n", WEXITSTATUS(status));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
static void
|
static void
|
||||||
test_fork(void)
|
test_fork(void)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
int status;
|
|
||||||
struct event ev, sig_ev, usr_ev, existing_ev;
|
struct event ev, sig_ev, usr_ev, existing_ev;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
|
||||||
@ -917,7 +940,7 @@ test_fork(void)
|
|||||||
/* we do not send an EOF; simple_read_cb requires an EOF
|
/* we do not send an EOF; simple_read_cb requires an EOF
|
||||||
* to set test_ok. we just verify that the callback was
|
* to set test_ok. we just verify that the callback was
|
||||||
* called. */
|
* called. */
|
||||||
exit(test_ok != 0 || called != 2 ? -2 : 76);
|
exit(test_ok != 0 || called != 2 ? -2 : TEST_FORK_EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** wait until client read first message */
|
/** wait until client read first message */
|
||||||
@ -928,18 +951,7 @@ test_fork(void)
|
|||||||
tt_fail_perror("write");
|
tt_fail_perror("write");
|
||||||
}
|
}
|
||||||
|
|
||||||
TT_BLATHER(("Before waitpid"));
|
fork_wait_check(pid);
|
||||||
if ((waitpid(pid, &status, WNOWAIT) == -1 && errno == EINVAL) &&
|
|
||||||
waitpid(pid, &status, 0) == -1) {
|
|
||||||
perror("waitpid");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
TT_BLATHER(("After waitpid"));
|
|
||||||
|
|
||||||
if (WEXITSTATUS(status) != 76) {
|
|
||||||
fprintf(stdout, "FAILED (exit): %d\n", WEXITSTATUS(status));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* test that the current event loop still works */
|
/* test that the current event loop still works */
|
||||||
if (write(pair[0], TEST1, strlen(TEST1)+1) < 0) {
|
if (write(pair[0], TEST1, strlen(TEST1)+1) < 0) {
|
||||||
|
@ -612,16 +612,8 @@ end:
|
|||||||
if (dns)
|
if (dns)
|
||||||
evdns_base_free(dns, 0);
|
evdns_base_free(dns, 0);
|
||||||
}
|
}
|
||||||
static void
|
static void dns_search_test(void *arg) { dns_search_test_impl(arg, 0); }
|
||||||
dns_search_test(void *arg)
|
static void dns_search_lower_test(void *arg) { dns_search_test_impl(arg, 1); }
|
||||||
{
|
|
||||||
return dns_search_test_impl(arg, 0);
|
|
||||||
}
|
|
||||||
static void
|
|
||||||
dns_search_lower_test(void *arg)
|
|
||||||
{
|
|
||||||
return dns_search_test_impl(arg, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int request_count = 0;
|
static int request_count = 0;
|
||||||
static struct evdns_request *current_req = NULL;
|
static struct evdns_request *current_req = NULL;
|
||||||
|
@ -545,8 +545,7 @@ http_basic_test_impl(void *arg, int ssl)
|
|||||||
if (bev)
|
if (bev)
|
||||||
bufferevent_free(bev);
|
bufferevent_free(bev);
|
||||||
}
|
}
|
||||||
static void http_basic_test(void *arg)
|
static void http_basic_test(void *arg) { http_basic_test_impl(arg, 0); }
|
||||||
{ return http_basic_test_impl(arg, 0); }
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -3327,7 +3326,7 @@ http_chunk_out_test_impl(void *arg, int ssl)
|
|||||||
evhttp_free(http);
|
evhttp_free(http);
|
||||||
}
|
}
|
||||||
static void http_chunk_out_test(void *arg)
|
static void http_chunk_out_test(void *arg)
|
||||||
{ return http_chunk_out_test_impl(arg, 0); }
|
{ http_chunk_out_test_impl(arg, 0); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_stream_out_test_impl(void *arg, int ssl)
|
http_stream_out_test_impl(void *arg, int ssl)
|
||||||
@ -3373,7 +3372,7 @@ http_stream_out_test_impl(void *arg, int ssl)
|
|||||||
evhttp_free(http);
|
evhttp_free(http);
|
||||||
}
|
}
|
||||||
static void http_stream_out_test(void *arg)
|
static void http_stream_out_test(void *arg)
|
||||||
{ return http_stream_out_test_impl(arg, 0); }
|
{ http_stream_out_test_impl(arg, 0); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_stream_in_chunk(struct evhttp_request *req, void *arg)
|
http_stream_in_chunk(struct evhttp_request *req, void *arg)
|
||||||
@ -3569,7 +3568,7 @@ http_connection_fail_test_impl(void *arg, int ssl)
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
static void http_connection_fail_test(void *arg)
|
static void http_connection_fail_test(void *arg)
|
||||||
{ return http_connection_fail_test_impl(arg, 0); }
|
{ http_connection_fail_test_impl(arg, 0); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_connection_retry_done(struct evhttp_request *req, void *arg)
|
http_connection_retry_done(struct evhttp_request *req, void *arg)
|
||||||
@ -3641,7 +3640,7 @@ http_simple_test_impl(void *arg, int ssl, int dirty)
|
|||||||
evhttp_free(http);
|
evhttp_free(http);
|
||||||
}
|
}
|
||||||
static void http_simple_test(void *arg)
|
static void http_simple_test(void *arg)
|
||||||
{ return http_simple_test_impl(arg, 0, 0); }
|
{ http_simple_test_impl(arg, 0, 0); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_connection_retry_test_basic(void *arg, const char *addr, struct evdns_base *dns_base, int ssl)
|
http_connection_retry_test_basic(void *arg, const char *addr, struct evdns_base *dns_base, int ssl)
|
||||||
@ -3798,16 +3797,16 @@ http_connection_retry_conn_address_test_impl(void *arg, int ssl)
|
|||||||
/** dnsserver will be cleaned in http_connection_retry_test_basic() */
|
/** dnsserver will be cleaned in http_connection_retry_test_basic() */
|
||||||
}
|
}
|
||||||
static void http_connection_retry_conn_address_test(void *arg)
|
static void http_connection_retry_conn_address_test(void *arg)
|
||||||
{ return http_connection_retry_conn_address_test_impl(arg, 0); }
|
{ http_connection_retry_conn_address_test_impl(arg, 0); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_connection_retry_test_impl(void *arg, int ssl)
|
http_connection_retry_test_impl(void *arg, int ssl)
|
||||||
{
|
{
|
||||||
return http_connection_retry_test_basic(arg, "127.0.0.1", NULL, ssl);
|
http_connection_retry_test_basic(arg, "127.0.0.1", NULL, ssl);
|
||||||
}
|
}
|
||||||
static void
|
static void
|
||||||
http_connection_retry_test(void *arg)
|
http_connection_retry_test(void *arg)
|
||||||
{ return http_connection_retry_test_impl(arg, 0); }
|
{ http_connection_retry_test_impl(arg, 0); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_primitives(void *ptr)
|
http_primitives(void *ptr)
|
||||||
@ -4474,7 +4473,7 @@ http_write_during_read_test_impl(void *arg, int ssl)
|
|||||||
evhttp_free(http);
|
evhttp_free(http);
|
||||||
}
|
}
|
||||||
static void http_write_during_read_test(void *arg)
|
static void http_write_during_read_test(void *arg)
|
||||||
{ return http_write_during_read_test_impl(arg, 0); }
|
{ http_write_during_read_test_impl(arg, 0); }
|
||||||
|
|
||||||
static void
|
static void
|
||||||
http_request_own_test(void *arg)
|
http_request_own_test(void *arg)
|
||||||
@ -4526,35 +4525,35 @@ http_request_own_test(void *arg)
|
|||||||
|
|
||||||
#ifdef EVENT__HAVE_OPENSSL
|
#ifdef EVENT__HAVE_OPENSSL
|
||||||
static void https_basic_test(void *arg)
|
static void https_basic_test(void *arg)
|
||||||
{ return http_basic_test_impl(arg, 1); }
|
{ http_basic_test_impl(arg, 1); }
|
||||||
static void https_filter_basic_test(void *arg)
|
static void https_filter_basic_test(void *arg)
|
||||||
{ return http_basic_test_impl(arg, 1 | HTTP_SSL_FILTER); }
|
{ http_basic_test_impl(arg, 1 | HTTP_SSL_FILTER); }
|
||||||
static void https_incomplete_test(void *arg)
|
static void https_incomplete_test(void *arg)
|
||||||
{ http_incomplete_test_(arg, 0, 1); }
|
{ http_incomplete_test_(arg, 0, 1); }
|
||||||
static void https_incomplete_timeout_test(void *arg)
|
static void https_incomplete_timeout_test(void *arg)
|
||||||
{ http_incomplete_test_(arg, 1, 1); }
|
{ http_incomplete_test_(arg, 1, 1); }
|
||||||
static void https_simple_test(void *arg)
|
static void https_simple_test(void *arg)
|
||||||
{ return http_simple_test_impl(arg, 1, 0); }
|
{ http_simple_test_impl(arg, 1, 0); }
|
||||||
static void https_simple_dirty_test(void *arg)
|
static void https_simple_dirty_test(void *arg)
|
||||||
{ return http_simple_test_impl(arg, 1, 1); }
|
{ http_simple_test_impl(arg, 1, 1); }
|
||||||
static void https_connection_retry_conn_address_test(void *arg)
|
static void https_connection_retry_conn_address_test(void *arg)
|
||||||
{ return http_connection_retry_conn_address_test_impl(arg, 1); }
|
{ http_connection_retry_conn_address_test_impl(arg, 1); }
|
||||||
static void https_connection_retry_test(void *arg)
|
static void https_connection_retry_test(void *arg)
|
||||||
{ return http_connection_retry_test_impl(arg, 1); }
|
{ http_connection_retry_test_impl(arg, 1); }
|
||||||
static void https_chunk_out_test(void *arg)
|
static void https_chunk_out_test(void *arg)
|
||||||
{ return http_chunk_out_test_impl(arg, 1); }
|
{ http_chunk_out_test_impl(arg, 1); }
|
||||||
static void https_filter_chunk_out_test(void *arg)
|
static void https_filter_chunk_out_test(void *arg)
|
||||||
{ return http_chunk_out_test_impl(arg, 1 | HTTP_SSL_FILTER); }
|
{ http_chunk_out_test_impl(arg, 1 | HTTP_SSL_FILTER); }
|
||||||
static void https_stream_out_test(void *arg)
|
static void https_stream_out_test(void *arg)
|
||||||
{ return http_stream_out_test_impl(arg, 1); }
|
{ http_stream_out_test_impl(arg, 1); }
|
||||||
static void https_connection_fail_test(void *arg)
|
static void https_connection_fail_test(void *arg)
|
||||||
{ return http_connection_fail_test_impl(arg, 1); }
|
{ http_connection_fail_test_impl(arg, 1); }
|
||||||
static void https_write_during_read_test(void *arg)
|
static void https_write_during_read_test(void *arg)
|
||||||
{ return http_write_during_read_test_impl(arg, 1); }
|
{ http_write_during_read_test_impl(arg, 1); }
|
||||||
static void https_connection_test(void *arg)
|
static void https_connection_test(void *arg)
|
||||||
{ return http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC, 1); }
|
{ http_connection_test_(arg, 0, "127.0.0.1", NULL, 0, AF_UNSPEC, 1); }
|
||||||
static void https_persist_connection_test(void *arg)
|
static void https_persist_connection_test(void *arg)
|
||||||
{ return http_connection_test_(arg, 1, "127.0.0.1", NULL, 0, AF_UNSPEC, 1); }
|
{ http_connection_test_(arg, 1, "127.0.0.1", NULL, 0, AF_UNSPEC, 1); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct testcase_t http_testcases[] = {
|
struct testcase_t http_testcases[] = {
|
||||||
|
@ -437,6 +437,7 @@ void evutil_free_secure_rng_globals_(void);
|
|||||||
void evutil_free_globals_(void);
|
void evutil_free_globals_(void);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
EVENT2_EXPORT_SYMBOL
|
||||||
HMODULE evutil_load_windows_system_library_(const TCHAR *library_name);
|
HMODULE evutil_load_windows_system_library_(const TCHAR *library_name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user