From f9a448db22162e0f96a9e2d9a79b1abdeb65d418 Mon Sep 17 00:00:00 2001 From: Bill Torpey Date: Sat, 19 May 2018 10:22:40 -0400 Subject: [PATCH] add -mutex param in pairs.cpp to serialize connect/send/disconnect (hint: doesnt help) --- threads/common.h | 7 +++++++ threads/pairs.cpp | 10 ++++++++++ zeromq.cmake | 7 +++---- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/threads/common.h b/threads/common.h index 5fd84dc..0a48a04 100755 --- a/threads/common.h +++ b/threads/common.h @@ -21,6 +21,7 @@ bool failed = false; bool dontWaitFlag = false; int linger = 30000; int msgSleep = 0; +bool mutexFlag = false; // max sent/received std::map maxControlMsgSent; @@ -220,6 +221,9 @@ void parseParams(int argc, char** argv) else if (!strcmp("-debug", argv[i])) { debugFlag = true; } + else if (!strcmp("-mutex", argv[i])) { + mutexFlag = true; + } else if (!strcmp("-poll", argv[i])) { pollFlag = true; } @@ -235,6 +239,9 @@ void parseParams(int argc, char** argv) if (pollFlag) { fprintf(stderr, "Polling after connect\n"); } + if (mutexFlag) { + fprintf(stderr, "Serializing send w/mutex\n"); + } fprintf(stderr, "Sleeping for %ld seconds at shutdown\n", sleepDuration); } diff --git a/threads/pairs.cpp b/threads/pairs.cpp index 9109cf8..0987146 100755 --- a/threads/pairs.cpp +++ b/threads/pairs.cpp @@ -9,6 +9,7 @@ // tls for control socket pthread_key_t key; +pthread_mutex_t sendMutex = PTHREAD_MUTEX_INITIALIZER; // send a command to the control socket void sendCommand(void* context, zmqControlMsg* msg, int msgSize) @@ -23,6 +24,10 @@ void sendCommand(void* context, zmqControlMsg* msg, int msgSize) checkInt(rc); } + if (mutexFlag) { + checkInt(pthread_mutex_lock(&sendMutex)); + } + rc = zmq_connect(controlPub, CONTROL_ENDPOINT); checkInt(rc); @@ -38,6 +43,11 @@ void sendCommand(void* context, zmqControlMsg* msg, int msgSize) rc = zmq_disconnect(controlPub, CONTROL_ENDPOINT); checkInt(rc); + + if (mutexFlag) { + checkInt(pthread_mutex_unlock(&sendMutex)); + } + } diff --git a/zeromq.cmake b/zeromq.cmake index adf010f..2f7c456 100755 --- a/zeromq.cmake +++ b/zeromq.cmake @@ -3,12 +3,10 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # common flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -fno-omit-frame-pointer -fPIC -D_REENTRANT ") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ggdb -fno-omit-frame-pointer -fPIC -D_REENTRANT ") # dont include any rpath at all -# needed for dynamically linking approp libTrAdapter based on LD_LIBRARY_PATH set(CMAKE_SKIP_RPATH TRUE) -# include rpath in build directory, but strip rpath on install -#set(CMAKE_SKIP_INSTALL_RPATH TRUE) message("CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}") message("CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}") @@ -28,9 +26,10 @@ set(WARNFLAGS "${WARNFLAGS} -Wno-ignored-qualifiers") # e.g., const o set(ZMQ_ROOT $ENV{ZMQ_ROOT}) set(ZMQ_INCDIR "${ZMQ_ROOT}/include") set(ZMQ_LIBDIR "${ZMQ_ROOT}/lib64") -set(ZMQ_CFLAGS "-I ${ZMQ_INCDIR}") +set(ZMQ_CFLAGS "-I ${ZMQ_INCDIR} -I ../") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ZMQ_CFLAGS}") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ZMQ_CFLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ZMQ_LDFLAGS} ${ZMQ_LDLIBS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,${ZMQ_LIBDIR}") link_directories(${ZMQ_LIBDIR})