summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Lucina <martin@lucina.net>2012-03-13 12:19:31 +0100
committerMartin Lucina <martin@lucina.net>2012-03-13 12:19:31 +0100
commit5749a18faea208ad19f39612c3c55166ca409fef (patch)
tree51976654ec6b706293820fe6b104f8f41774b5f4
parent4ae2af8c9a3f9f928b411eb31b4007a4ce8f26ba (diff)
xs_utils cleanup 1/2 (minimize exported api)
Reduced xs_utils to the minimum functions required (xs_stopwatch_*) xs_sleep, xs_thread_* are internal to unit tests and have been moved to testutil.hpp, useless use of xs_sleep in perf/ has been removed. Signed-off-by: Martin Lucina <martin@lucina.net>
-rw-r--r--perf/local_lat.cpp2
-rw-r--r--src/xs_utils.cpp96
-rw-r--r--src/xszmq.cpp16
-rw-r--r--tests/polltimeo.cpp8
-rw-r--r--tests/reconnect.cpp4
-rw-r--r--tests/shutdown_stress.cpp4
-rw-r--r--tests/sub_forward.cpp2
-rw-r--r--tests/testutil.hpp93
-rw-r--r--tests/timeo.cpp8
9 files changed, 120 insertions, 113 deletions
diff --git a/perf/local_lat.cpp b/perf/local_lat.cpp
index ca6a1e3..86adb2f 100644
--- a/perf/local_lat.cpp
+++ b/perf/local_lat.cpp
@@ -91,8 +91,6 @@ int main (int argc, char *argv [])
return -1;
}
- xs_sleep (1);
-
rc = xs_close (s);
if (rc != 0) {
printf ("error in xs_close: %s\n", xs_strerror (errno));
diff --git a/src/xs_utils.cpp b/src/xs_utils.cpp
index d10efbc..d2fe755 100644
--- a/src/xs_utils.cpp
+++ b/src/xs_utils.cpp
@@ -29,22 +29,6 @@
#include "clock.hpp"
#include "err.hpp"
-#if !defined XS_HAVE_WINDOWS
-#include <unistd.h>
-#include <pthread.h>
-#else
-#include "windows.hpp"
-#endif
-
-void xs_sleep (int seconds_)
-{
-#if defined XS_HAVE_WINDOWS
- Sleep (seconds_ * 1000);
-#else
- sleep (seconds_);
-#endif
-}
-
void *xs_stopwatch_start ()
{
uint64_t *watch = (uint64_t*) malloc (sizeof (uint64_t));
@@ -61,83 +45,3 @@ unsigned long xs_stopwatch_stop (void *watch_)
return (unsigned long) (end - start);
}
-#if defined XS_HAVE_WINDOWS
-
-struct arg_t
-{
- HANDLE handle;
- void (*fn) (void *arg);
- void *arg;
-};
-
-extern "C"
-{
- static unsigned int __stdcall thread_routine (void *arg_)
- {
- arg_t *arg = (arg_t*) arg_;
- arg->fn (arg->arg);
- return 0;
- }
-}
-
-void *xs_thread_create (void (*fn_) (void *arg_), void *arg_)
-{
- arg_t *arg = (arg_t*) malloc (sizeof (arg_t));
- alloc_assert (arg);
- arg->fn = fn_;
- arg->arg = arg_;
- arg->handle = (HANDLE) _beginthreadex (NULL, 0,
- &::thread_routine, (void*) arg, 0 , NULL);
- win_assert (arg->handle != NULL);
- return (void*) arg;
-}
-
-void xs_thread_join (void *thread_)
-{
- arg_t *arg = (arg_t*) thread_;
- DWORD rc = WaitForSingleObject (arg->handle, INFINITE);
- win_assert (rc != WAIT_FAILED);
- BOOL rc2 = CloseHandle (arg->handle);
- win_assert (rc2 != 0);
- free (arg);
-}
-
-#else
-
-struct arg_t
-{
- pthread_t handle;
- void (*fn) (void *arg);
- void *arg;
-};
-
-extern "C"
-{
- static void *thread_routine (void *arg_)
- {
- arg_t *arg = (arg_t*) arg_;
- arg->fn (arg->arg);
- return NULL;
- }
-}
-
-void *xs_thread_create (void (*fn_) (void *arg_), void *arg_)
-{
- arg_t *arg = (arg_t*) malloc (sizeof (arg_t));
- alloc_assert (arg);
- arg->fn = fn_;
- arg->arg = arg_;
- int rc = pthread_create (&arg->handle, NULL, thread_routine, (void*) arg);
- posix_assert (rc);
- return (void*) arg;
-}
-
-void xs_thread_join (void *thread_)
-{
- arg_t *arg = (arg_t*) thread_;
- int rc = pthread_join (arg->handle, NULL);
- posix_assert (rc);
- free (arg);
-}
-
-#endif
diff --git a/src/xszmq.cpp b/src/xszmq.cpp
index 350929d..b1f892a 100644
--- a/src/xszmq.cpp
+++ b/src/xszmq.cpp
@@ -25,10 +25,18 @@
#include "../include/xs.h"
#include "../include/xs_utils.h"
+#include "platform.hpp"
+
#include <assert.h>
#include <stdlib.h>
#include <stdint.h>
+#if !defined XS_HAVE_WINDOWS
+#include <unistd.h>
+#else
+#include <windows.hpp>
+#endif
+
void zmq_version (int *major_, int *minor_, int *patch_)
{
*major_ = ZMQ_VERSION_MAJOR;
@@ -451,8 +459,12 @@ unsigned long zmq_stopwatch_stop (void *watch)
return xs_stopwatch_stop (watch);
}
-void zmq_sleep (int seconds)
+void zmq_sleep (int seconds_)
{
- xs_sleep (seconds);
+#if defined XS_HAVE_WINDOWS
+ Sleep (seconds_ * 1000);
+#else
+ sleep (seconds_);
+#endif
}
diff --git a/tests/polltimeo.cpp b/tests/polltimeo.cpp
index 3f7a233..087d125 100644
--- a/tests/polltimeo.cpp
+++ b/tests/polltimeo.cpp
@@ -26,12 +26,12 @@ extern "C"
{
// Worker thread connects after delay of 1 second. Then it waits
// for 1 more second, so that async connect has time to succeed.
- xs_sleep (1);
+ sleep (1);
void *sc = xs_socket (ctx_, XS_PUSH);
assert (sc);
int rc = xs_connect (sc, "inproc://timeout_test");
assert (rc == 0);
- xs_sleep (1);
+ sleep (1);
rc = xs_close (sc);
assert (rc == 0);
}
@@ -61,14 +61,14 @@ int XS_TEST_MAIN ()
assert (elapsed > 440000 && elapsed < 550000);
// Check whether connection during the wait doesn't distort the timeout.
- void *thread = xs_thread_create (polltimeo_worker, ctx);
+ void *thread = thread_create (polltimeo_worker, ctx);
assert (thread);
watch = xs_stopwatch_start ();
rc = xs_poll (&pi, 1, 2000);
assert (rc == 0);
elapsed = xs_stopwatch_stop (watch);
assert (elapsed > 1900000 && elapsed < 2100000);
- xs_thread_join (thread);
+ thread_join (thread);
// Clean-up.
rc = xs_close (sb);
diff --git a/tests/reconnect.cpp b/tests/reconnect.cpp
index c23d306..af8eda4 100644
--- a/tests/reconnect.cpp
+++ b/tests/reconnect.cpp
@@ -39,7 +39,7 @@ int XS_TEST_MAIN ()
assert (rc == 3);
// Wait a while for few attempts to reconnect to happen.
- xs_sleep (1);
+ sleep (1);
// Bind the peer and get the message.
rc = xs_bind (pull, "tcp://127.0.0.1:5560");
@@ -67,7 +67,7 @@ int XS_TEST_MAIN ()
assert (rc == 3);
// Wait a while for few attempts to reconnect to happen.
- xs_sleep (1);
+ sleep (1);
// Bind the peer and get the message.
rc = xs_bind (pull, "tcp://127.0.0.1:5560");
diff --git a/tests/shutdown_stress.cpp b/tests/shutdown_stress.cpp
index d7dffe8..27ab1f0 100644
--- a/tests/shutdown_stress.cpp
+++ b/tests/shutdown_stress.cpp
@@ -70,12 +70,12 @@ int XS_TEST_MAIN ()
for (i = 0; i != THREAD_COUNT; i++) {
s2 = xs_socket (ctx, XS_SUB);
assert (s2);
- threads [i] = xs_thread_create (shutdown_stress_worker, s2);
+ threads [i] = thread_create (shutdown_stress_worker, s2);
assert (threads [i]);
}
for (i = 0; i != THREAD_COUNT; i++)
- xs_thread_join (threads [i]);
+ thread_join (threads [i]);
rc = xs_close (s1);
assert (rc == 0);
diff --git a/tests/sub_forward.cpp b/tests/sub_forward.cpp
index cfff043..6d385de 100644
--- a/tests/sub_forward.cpp
+++ b/tests/sub_forward.cpp
@@ -62,7 +62,7 @@ int XS_TEST_MAIN ()
assert (rc >= 0);
// Wait a bit till the subscription gets to the publisher.
- xs_sleep (1);
+ sleep (1);
// Send an empty message.
rc = xs_send (pub, NULL, 0, 0);
diff --git a/tests/testutil.hpp b/tests/testutil.hpp
index 8935dc8..d3452e3 100644
--- a/tests/testutil.hpp
+++ b/tests/testutil.hpp
@@ -26,15 +26,108 @@
#include <string.h>
#include <stdio.h>
#include <stddef.h>
+#include <stdlib.h>
#include "../include/xs.h"
#include "../include/xs_utils.h"
#include "../src/platform.hpp"
+#if !defined XS_HAVE_WINDOWS
+#include <unistd.h>
+#include <pthread.h>
+#else
+#include "../src/windows.hpp"
+#endif
+
#if !defined XS_TEST_MAIN
#define XS_TEST_MAIN main
#endif
+#if defined XS_HAVE_WINDOWS
+#define sleep(s) Sleep ((s) * 1000)
+#endif
+
+#if defined XS_HAVE_WINDOWS
+
+struct arg_t
+{
+ HANDLE handle;
+ void (*fn) (void *arg);
+ void *arg;
+};
+
+extern "C"
+{
+ static unsigned int __stdcall thread_routine (void *arg_)
+ {
+ arg_t *arg = (arg_t*) arg_;
+ arg->fn (arg->arg);
+ return 0;
+ }
+}
+
+void *thread_create (void (*fn_) (void *arg_), void *arg_)
+{
+ arg_t *arg = (arg_t*) malloc (sizeof (arg_t));
+ assert (arg);
+ arg->fn = fn_;
+ arg->arg = arg_;
+ arg->handle = (HANDLE) _beginthreadex (NULL, 0,
+ &::thread_routine, (void*) arg, 0 , NULL);
+ win_assert (arg->handle != NULL);
+ return (void*) arg;
+}
+
+void thread_join (void *thread_)
+{
+ arg_t *arg = (arg_t*) thread_;
+ DWORD rc = WaitForSingleObject (arg->handle, INFINITE);
+ win_assert (rc != WAIT_FAILED);
+ BOOL rc2 = CloseHandle (arg->handle);
+ win_assert (rc2 != 0);
+ free (arg);
+}
+
+#else
+
+struct arg_t
+{
+ pthread_t handle;
+ void (*fn) (void *arg);
+ void *arg;
+};
+
+extern "C"
+{
+ static void *thread_routine (void *arg_)
+ {
+ arg_t *arg = (arg_t*) arg_;
+ arg->fn (arg->arg);
+ return NULL;
+ }
+}
+
+void *thread_create (void (*fn_) (void *arg_), void *arg_)
+{
+ arg_t *arg = (arg_t*) malloc (sizeof (arg_t));
+ assert (arg);
+ arg->fn = fn_;
+ arg->arg = arg_;
+ int rc = pthread_create (&arg->handle, NULL, thread_routine, (void*) arg);
+ assert (rc == 0);
+ return (void*) arg;
+}
+
+void thread_join (void *thread_)
+{
+ arg_t *arg = (arg_t*) thread_;
+ int rc = pthread_join (arg->handle, NULL);
+ assert (rc == 0);
+ free (arg);
+}
+
+#endif
+
inline void bounce (void *sb, void *sc)
{
const char *content = "12345678ABCDEFGH12345678abcdefgh";
diff --git a/tests/timeo.cpp b/tests/timeo.cpp
index 000e718..e2dcbb8 100644
--- a/tests/timeo.cpp
+++ b/tests/timeo.cpp
@@ -26,12 +26,12 @@ extern "C"
{
// Worker thread connects after delay of 1 second. Then it waits
// for 1 more second, so that async connect has time to succeed.
- xs_sleep (1);
+ sleep (1);
void *sc = xs_socket (ctx_, XS_PUSH);
assert (sc);
int rc = xs_connect (sc, "inproc://timeout_test");
assert (rc == 0);
- xs_sleep (1);
+ sleep (1);
rc = xs_close (sc);
assert (rc == 0);
}
@@ -72,7 +72,7 @@ int XS_TEST_MAIN ()
timeout = 2000;
rc = xs_setsockopt(sb, XS_RCVTIMEO, &timeout, timeout_size);
assert (rc == 0);
- void *thread = xs_thread_create (timeo_worker, ctx);
+ void *thread = thread_create (timeo_worker, ctx);
assert (thread);
watch = xs_stopwatch_start ();
rc = xs_recv (sb, buf, 32, 0);
@@ -80,7 +80,7 @@ int XS_TEST_MAIN ()
assert (xs_errno () == EAGAIN);
elapsed = xs_stopwatch_stop (watch);
assert (elapsed > 1900000 && elapsed < 2100000);
- xs_thread_join (thread);
+ thread_join (thread);
// Check that timeouts don't break normal message transfer.
void *sc = xs_socket (ctx, XS_PUSH);