Revert "Switched from nanomsg to zeromq temporarily until the fork patch works"

This reverts commit 4af745bf88.
This commit is contained in:
Snaipe 2016-01-28 23:37:41 +01:00
parent 98fbab0afd
commit 04042ab71a
14 changed files with 77 additions and 93 deletions

9
.gitmodules vendored
View file

@ -13,6 +13,9 @@
[submodule "dependencies/nanopb"]
path = dependencies/nanopb
url = https://github.com/nanopb/nanopb.git
[submodule "dependencies/libzmq"]
path = dependencies/libzmq
url = https://github.com/zeromq/zeromq4-1
[submodule "dependencies/nanomsg"]
path = dependencies/nanomsg
url = https://github.com/nanomsg/nanomsg.git
[submodule "dependencies/nanomsg-patched"]
path = dependencies/nanomsg-patched
url = https://github.com/Snaipe/nanomsg.git

View file

@ -27,17 +27,18 @@ include (PackageUtils)
cr_add_subproject (csptr PATH dependencies/libcsptr CMAKE)
cr_add_subproject (dyncall_s PATH dependencies/dyncall CMAKE IF THEORIES)
cr_add_subproject (zmq
PATH dependencies/libzmq
LIBNAME libzmq-static
OPTS
-DZMQ_MAKE_VALGRIND_HAPPY=1
-DZMQ_BUILD_FRAMEWORK=OFF
-DZMQ_BUILD_TESTS=OFF
-DWITH_TWEETNACL=OFF
-DWITH_PERF_TOOL=OFF
cr_add_subproject (nanomsg
PATH dependencies/nanomsg-patched
OPTS "-DNN_TESTS=OFF"
GENERATOR "Visual Studio 14 2015"
CMAKE
PARALLELIZED
IF WIN32 AND NOT CYGWIN
)
cr_add_subproject (nanomsg
PATH dependencies/nanomsg-patched
AUTOTOOLS
PARALLELIZE
IF NOT WIN32 OR CYGWIN
)
cr_add_subproject (wingetopt PATH dependencies/wingetopt CMAKE IF MSVC)
@ -77,7 +78,7 @@ cr_add_library(criterion SHARED
)
cr_link_subproject(criterion csptr STATIC)
cr_link_subproject(criterion zmq SHARED)
cr_link_subproject(criterion nanomsg STATIC)
cr_link_subproject(criterion dyncall_s STATIC)
cr_link_subproject(criterion wingetopt STATIC)

1
dependencies/libzmq vendored

@ -1 +0,0 @@
Subproject commit 5501f19a0f4c596c5247c743c04759ef075927d3

1
dependencies/nanomsg vendored Submodule

@ -0,0 +1 @@
Subproject commit fd66ff55a5bad44ea0c3cca8bea345b6f02663bf

1
dependencies/nanomsg-patched vendored Submodule

@ -0,0 +1 @@
Subproject commit 8809bc55d8944d48a576c644499f5399ebe68cda

View file

@ -66,7 +66,7 @@ struct kh_ht_client_s;
struct kh_ht_extern_s;
struct server_ctx {
cr_socket socket;
int socket;
struct criterion_suite extern_suite;
struct criterion_test_extra_data extern_suite_data;
struct criterion_global_stats *gstats;

View file

@ -27,6 +27,7 @@
#include <errno.h>
#include <csptr/smalloc.h>
#include <valgrind/valgrind.h>
#include <nanomsg/nn.h>
#include "criterion/internal/test.h"
#include "criterion/options.h"
#include "criterion/internal/ordered-set.h"
@ -170,13 +171,9 @@ const struct criterion_suite *criterion_current_suite;
void run_test_child(struct criterion_test *test,
struct criterion_suite *suite) {
// Reinitialize transport context after fork
cr_transport_term ();
cr_transport_init ();
cr_redirect_stdin();
g_client_socket = connect_client();
if (g_client_socket == NULL) {
if (g_client_socket < 0) {
criterion_perror("Could not initialize the message client: %s.\n",
strerror(errno));
abort();
@ -302,7 +299,7 @@ static struct client_ctx *spawn_next_client(struct server_ctx *sctx, ccrContext
static void run_tests_async(struct criterion_test_set *set,
struct criterion_global_stats *stats,
cr_socket socket) {
int socket) {
ccrContext ctx = 0;
@ -384,17 +381,15 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) {
fflush(NULL); // flush everything before forking
cr_transport_init ();
cr_socket sock = bind_server();
if (sock == NULL) {
int sock = bind_server();
if (sock < 0) {
criterion_perror("Could not initialize the message server: %s.\n",
strerror(errno));
abort();
}
g_client_socket = connect_client();
if (g_client_socket == NULL) {
if (g_client_socket < 0) {
criterion_perror("Could not initialize the message client: %s.\n",
strerror(errno));
abort();
@ -420,7 +415,6 @@ cleanup:
close_socket (g_client_socket);
close_socket (sock);
}
cr_transport_term ();
sfree(stats);
return result;
}

View file

@ -25,6 +25,7 @@
#include <stdbool.h>
#include <errno.h>
#include <csptr/smalloc.h>
#include <nanomsg/nn.h>
#include "criterion/types.h"
#include "criterion/options.h"

View file

@ -28,7 +28,7 @@
#include "event.h"
#include "assert.h"
cr_socket g_client_socket = NULL;
int g_client_socket = -1;
void criterion_send_assert(struct criterion_assert_stats *stats) {
assert(stats->message);

View file

@ -26,11 +26,10 @@
# include "criterion/event.h"
# include "core/worker.h"
# include "protocol/connect.h"
# include <stdio.h>
# include <pb.h>
extern cr_socket g_client_socket;
extern int g_client_socket;
struct event {
unsigned long long pid;

View file

@ -22,53 +22,46 @@
* THE SOFTWARE.
*/
#include <errno.h>
#include <zmq.h>
#include "connect.h"
#include <nanomsg/nn.h>
#include <nanomsg/reqrep.h>
#define URL "ipc://criterion.sock"
#define errno_ignore(Stmt) do { int err = errno; Stmt; errno = err; } while (0)
static void *zmq_ctx;
int bind_server(void) {
int fstrat = NN_FORK_RESET;
nn_setopt(NN_FORK_STRATEGY, &fstrat, sizeof (fstrat));
void cr_transport_init (void) {
zmq_ctx = zmq_ctx_new ();
}
int sock = nn_socket(AF_SP, NN_REP);
if (sock < 0)
return -1;
void cr_transport_term (void) {
zmq_ctx_destroy (zmq_ctx);
}
cr_socket bind_server(void) {
cr_socket sock = zmq_socket(zmq_ctx, ZMQ_REP);
if (sock == NULL)
goto error;
if (zmq_bind(sock, URL) < 0)
if (nn_bind(sock, URL) < 0)
goto error;
return sock;
error: {}
if (sock)
errno_ignore(zmq_close(sock));
return NULL;
errno_ignore(nn_close(sock));
return -1;
}
cr_socket connect_client(void) {
cr_socket sock = zmq_socket(zmq_ctx, ZMQ_REQ);
if (sock == NULL)
goto error;
int connect_client(void) {
int sock = nn_socket(AF_SP, NN_REQ);
if (sock < 0)
return -1;
if (zmq_connect (sock, URL) < 0)
if (nn_connect (sock, URL) < 0)
goto error;
return sock;
error: {}
if (sock)
errno_ignore(zmq_close(sock));
return NULL;
errno_ignore(nn_close(sock));
return -1;
}
void close_socket(cr_socket sock) {
zmq_close(sock);
void close_socket(int sock) {
nn_close(sock);
}

View file

@ -24,13 +24,8 @@
#ifndef CONNECT_H_
# define CONNECT_H_
typedef void *cr_socket;
void cr_transport_init (void);
void cr_transport_term (void);
cr_socket connect_client(void);
cr_socket bind_server(void);
void close_socket(cr_socket sock);
int connect_client(void);
int bind_server(void);
void close_socket(int sock);
#endif /* !CONNECT_H_ */

View file

@ -21,24 +21,22 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <nanomsg/nn.h>
#include <stdlib.h>
#include <zmq.h>
#include "protocol/protocol.h"
#include "criterion/logging.h"
#include "io/event.h"
#include "io/asprintf.h"
int read_message(cr_socket sock, criterion_protocol_msg *message) {
int read_message(int sock, criterion_protocol_msg *message) {
int res;
zmq_msg_t msg;
zmq_msg_init (&msg);
int read = res = zmq_msg_recv(&msg, sock, 0);
unsigned char *buf = NULL;
int read = res = nn_recv(sock, &buf, NN_MSG, 0);
if (read <= 0)
goto cleanup;
pb_istream_t stream = pb_istream_from_buffer(zmq_msg_data(&msg), read);
pb_istream_t stream = pb_istream_from_buffer(buf, read);
if (!pb_decode(&stream, criterion_protocol_msg_fields, message)) {
res = -2;
goto cleanup;
@ -46,11 +44,12 @@ int read_message(cr_socket sock, criterion_protocol_msg *message) {
res = 1;
cleanup:
zmq_msg_close(&msg);
if (buf)
nn_freemsg(buf);
return res;
}
int write_message(cr_socket sock, const criterion_protocol_msg *message) {
int write_message(int sock, const criterion_protocol_msg *message) {
int res = -1;
size_t size;
unsigned char *buf = NULL;
@ -62,7 +61,7 @@ int write_message(cr_socket sock, const criterion_protocol_msg *message) {
if (!pb_encode(&stream, criterion_protocol_msg_fields, message))
goto cleanup;
int written = zmq_send(sock, buf, size, 0);
int written = nn_send(sock, buf, size, 0);
if (written <= 0 || written != (int) size)
goto cleanup;
@ -84,22 +83,20 @@ void cr_send_to_runner(const criterion_protocol_msg *message) {
if (write_message(g_client_socket, message) != 1) {
criterion_perror("Could not write the \"%s\" message down the event pipe: %s.\n",
message_names[message->data.which_value],
zmq_strerror(errno));
nn_strerror(errno));
abort();
}
zmq_msg_t msg;
zmq_msg_init (&msg);
int read = zmq_msg_recv(&msg, g_client_socket, 0);
unsigned char *buf = NULL;
int read = nn_recv(g_client_socket, &buf, NN_MSG, 0);
if (read <= 0) {
criterion_perror("Could not read ack: %s.\n", zmq_strerror(errno));
criterion_perror("Could not read ack: %s.\n", nn_strerror(errno));
abort();
}
criterion_protocol_ack ack;
pb_istream_t stream = pb_istream_from_buffer(zmq_msg_data(&msg), read);
pb_istream_t stream = pb_istream_from_buffer(buf, read);
if (!pb_decode(&stream, criterion_protocol_ack_fields, &ack)) {
criterion_perror("Could not decode ack: %s.\n", PB_GET_ERROR(&stream));
abort();
@ -111,10 +108,11 @@ void cr_send_to_runner(const criterion_protocol_msg *message) {
}
pb_release(criterion_protocol_ack_fields, &ack);
zmq_msg_close(&msg);
if (buf)
nn_freemsg(buf);
}
void send_ack(cr_socket sock, bool ok, const char *msg, ...) {
void send_ack(int sock, bool ok, const char *msg, ...) {
criterion_protocol_ack ack;
ack.status_code = ok ? criterion_protocol_ack_status_OK : criterion_protocol_ack_status_ERROR;
ack.message = NULL;
@ -141,9 +139,9 @@ void send_ack(cr_socket sock, bool ok, const char *msg, ...) {
abort();
}
int written = zmq_send(sock, buf, size, 0);
int written = nn_send(sock, buf, size, 0);
if (written <= 0 || written != (int) size) {
criterion_perror("Could not send ack: %s.\n", zmq_strerror(errno));
criterion_perror("Could not send ack: %s.\n", nn_strerror(errno));
abort();
}

View file

@ -25,12 +25,11 @@
# define MESSAGES_H_
# include "criterion.pb.h"
# include "connect.h"
int write_message(cr_socket sock, const criterion_protocol_msg *message);
int read_message(cr_socket sock, criterion_protocol_msg *message);
int write_message(int sock, const criterion_protocol_msg *message);
int read_message(int sock, criterion_protocol_msg *message);
void cr_send_to_runner(const criterion_protocol_msg *message);
void send_ack(cr_socket sock, bool ok, const char *msg, ...);
void send_ack(int sock, bool ok, const char *msg, ...);
void free_message(criterion_protocol_msg *msg);
#endif /* !MESSAGES_H_ */