tags 815495 + patch user debian-bsd@lists.debian.org usertags 815495 + kfreebsd thanks Hello, Aaron M. Ucko wrote: > Builds of zeromq3 for kFreeBSD are now failing with > > src/ipc_listener.cpp: In member function 'bool zmq::ipc_listener_t::filter(zmq::fd_t)': > src/ipc_listener.cpp:263:19: error: aggregate 'zmq::ipc_listener_t::filter(zmq::fd_t)::xucred cred' has incomplete type and cannot be defined > struct xucred cred; > ^ > src/ipc_listener.cpp:268:28: error: 'XUCRED_VERSION' was not declared in this scope > if (cred.cr_version != XUCRED_VERSION) > ^ It was just a missing #include. Please find patch attached (sys_ucred_h.patch). There were some other issues on kfreebsd at run-time: | FAIL: test_system | ================= | | Function not implemented (src/thread.cpp:135) | FAIL test_system (exit status: 134) most tests were failing that way. GNU/kFreeBSD doesn't implement pthread_setschedparam yet, so I think we should gracefully ignore ENOSYS instead of aborting. With that fixed, another error was. | FAIL: test_shutdown_stress | ========================== | | Connection reset by peer (src/stream_engine.cpp:162) | FAIL test_shutdown_stress (exit status: 134) The other patch (kfreebsd-support.patch) fixes all these things, and all tests pass for me now on kfreebsd-amd64. Thanks! Regards, -- Steven Chamberlain steven@pyro.eu.org
Subject: include sys/ucred.h for struct ucred From: Steven Chamberlain <steven@pyro.eu.org> Date: Mon, 22 Feb 2016 02:21:34 +0000 The OSes that have struct ucred, typically declare it in sys/ucred.h --- a/src/ipc_listener.cpp +++ b/src/ipc_listener.cpp @@ -51,6 +51,7 @@ #if defined ZMQ_HAVE_SO_PEERCRED || defined ZMQ_HAVE_LOCAL_PEERCRED # include <sys/types.h> +# include <sys/ucred.h> #endif #ifdef ZMQ_HAVE_SO_PEERCRED # include <pwd.h> --- a/src/stream_engine.cpp +++ b/src/stream_engine.cpp @@ -38,6 +38,11 @@ #include <netinet/in.h> #include <netdb.h> #include <fcntl.h> + +#if defined ZMQ_HAVE_SO_PEERCRED || defined ZMQ_HAVE_LOCAL_PEERCRED +# include <sys/types.h> +# include <sys/ucred.h> +#endif #if defined ZMQ_HAVE_OPENBSD #define ucred sockpeercred #endif
Subject: add support for GNU/kFreeBSD From: Steven Chamberlain <steven@pyro.eu.org> Date: Mon, 22 Feb 2016 02:21:34 +0000 The FreeBSD kernel may return ECONNRESET on close() under load but this is not an error. Debian GNU/kFreeBSD doesn't currently implement pthread_setschedparam, so don't abort if it returns ENOSYS. --- a/src/stream_engine.cpp +++ b/src/stream_engine.cpp @@ -159,6 +159,12 @@ wsa_assert (rc != SOCKET_ERROR); #else int rc = close (s); +#ifdef __FreeBSD_kernel__ + // FreeBSD may return ECONNRESET on close() under load but this is not + // an error. + if (rc == -1 && errno == ECONNRESET) + rc = 0; +#endif errno_assert (rc == 0); #endif s = retired_fd; --- a/src/thread.cpp +++ b/src/thread.cpp @@ -132,6 +132,10 @@ } rc = pthread_setschedparam(descriptor, policy, ¶m); + + // If this feature is unavailable at run-time, don't abort. + if(rc == ENOSYS) return; + posix_assert (rc); #endif }
Attachment:
signature.asc
Description: Digital signature