mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-12 13:58:58 -04:00
Work-around a stupid gcov-breaking bug in OSX 10.6
This only affects the unit tests. Fix found at http://rachelbythebay.com/w/2011/07/12/forkcrash/ (Backport from 2.1)
This commit is contained in:
parent
4e62cd167b
commit
b3887cdf3b
@ -851,7 +851,7 @@ test_fork(void)
|
||||
|
||||
event_base_assert_ok(current_base);
|
||||
TT_BLATHER(("Before fork"));
|
||||
if ((pid = fork()) == 0) {
|
||||
if ((pid = regress_fork()) == 0) {
|
||||
/* in the child */
|
||||
TT_BLATHER(("In child, before reinit"));
|
||||
event_base_assert_ok(current_base);
|
||||
|
@ -118,6 +118,8 @@ int _test_ai_eq(const struct evutil_addrinfo *ai, const char *sockaddr_port,
|
||||
|
||||
long timeval_msec_diff(const struct timeval *start, const struct timeval *end);
|
||||
|
||||
pid_t regress_fork(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -32,6 +32,14 @@
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__) && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
|
||||
#if (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060 && \
|
||||
__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
|
||||
#define FORK_BREAKS_GCOV
|
||||
#include <vproc.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "event2/event-config.h"
|
||||
|
||||
#ifdef _EVENT___func__
|
||||
@ -154,6 +162,18 @@ regress_make_tmpfile(const void *data, size_t datalen)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
pid_t
|
||||
regress_fork(void)
|
||||
{
|
||||
pid_t pid = fork();
|
||||
#ifdef FORK_BREAKS_GCOV
|
||||
vproc_transaction_begin(0);
|
||||
#endif
|
||||
return pid;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
ignore_log_cb(int s, const char *msg)
|
||||
{
|
||||
|
@ -469,7 +469,7 @@ check_error_logging(void (*fn)(void), int wantexitcode,
|
||||
int status = 0, exitcode;
|
||||
fatal_want_severity = wantseverity;
|
||||
fatal_want_message = wantmsg;
|
||||
if ((pid = fork()) == 0) {
|
||||
if ((pid = regress_fork()) == 0) {
|
||||
/* child process */
|
||||
fn();
|
||||
exit(0); /* should be unreachable. */
|
||||
|
@ -40,6 +40,15 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__) && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
|
||||
#if (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060 && \
|
||||
__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
|
||||
/* Workaround for a stupid bug in OSX 10.6 */
|
||||
#define FORK_BREAKS_GCOV
|
||||
#include <vproc.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __GNUC__
|
||||
#define __attribute__(x)
|
||||
#endif
|
||||
@ -161,6 +170,9 @@ _testcase_run_forked(const struct testgroup_t *group,
|
||||
if (opt_verbosity>0)
|
||||
printf("[forking] ");
|
||||
pid = fork();
|
||||
#ifdef FORK_BREAKS_GCOV
|
||||
vproc_transaction_begin(0);
|
||||
#endif
|
||||
if (!pid) {
|
||||
/* child. */
|
||||
int test_r, write_r;
|
||||
|
Loading…
x
Reference in New Issue
Block a user