summaryrefslogtreecommitdiff
path: root/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c')
-rw-r--r--lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c67
1 files changed, 32 insertions, 35 deletions
diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c b/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c
index 62e949cd8b..ef1ab96d41 100644
--- a/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c
+++ b/lib/erl_interface/test/ei_accept_SUITE_data/eiaccnode.c
@@ -22,35 +22,28 @@
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#ifdef __WIN32__
#include <winsock2.h>
#include <windows.h>
#include <process.h>
#else
-#ifndef VXWORKS
#include <pthread.h>
-#endif
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#endif
#include "ei.h"
+#include "my_ussi.h"
-#ifdef VXWORKS
-#include <vxWorks.h>
-#include <sockLib.h>
-#include <inetLib.h>
-#define MAIN cnode
-#else
#define MAIN main
-#endif
/*
A small einode.
To be called from the test case ei_accept_SUITE:multi_thread
- usage: eiaccnode <cookie> <n>
+ usage: eiaccnode <cookie> <n> <default|ussi>
- start threads 0..n-1
- in each thread
@@ -61,7 +54,8 @@
- shutdown gracefully
*/
-static const char* cookie, * desthost;
+static const char* cookie;
+static int use_ussi;
#ifndef SD_SEND
#ifdef SHUTWR
@@ -78,7 +72,7 @@ static void*
#endif
einode_thread(void* num)
{
- int n = (int)num;
+ int n = (int)(long)num;
int port;
ei_cnode ec;
char myname[100], destname[100], filename[100];
@@ -88,18 +82,26 @@ static void*
FILE* file;
sprintf(filename, "eiacc%d_trace.txt", n);
- file = fopen(filename, "w");
+ file = fopen(filename, "a");
sprintf(myname, "eiacc%d", n); fflush(file);
- r = ei_connect_init(&ec, myname, cookie, 0);
+ fprintf(file, "---- use_ussi = %d ----\n", use_ussi); fflush(file);
+ if (use_ussi)
+ r = ei_connect_init_ussi(&ec, myname, cookie, 0,
+ &my_ussi, sizeof(my_ussi), NULL);
+ else
+ r = ei_connect_init(&ec, myname, cookie, 0);
+ fprintf(file, "r=%d\n", r); fflush(file);
port = 0;
listen = ei_listen(&ec, &port, 5);
if (listen <= 0) {
fprintf(file, "listen err\n"); fflush(file);
exit(7);
}
- fprintf(file, "thread %d (%s:%s) listening on port %d\n", n, myname, destname, port);
- if (ei_publish(&ec, port) == -1) {
+ fprintf(file, "thread %d (%s:%s) listening on port %d\n", n, myname, destname, port); fflush(file);
+ r = ei_publish(&ec, port);
+ fprintf(file, "r=%d\n", r); fflush(file);
+ if (r == -1) {
fprintf(file, "ei_publish port %d\n", port+n); fflush(file);
exit(8);
}
@@ -151,54 +153,52 @@ static void*
return 0;
}
+int
MAIN(int argc, char *argv[])
{
int i, n, no_threads;
-#ifndef VXWORKS
#ifdef __WIN32__
HANDLE threads[100];
#else
pthread_t threads[100];
#endif
-#endif
- if (argc < 3)
+ if (argc < 4)
exit(1);
cookie = argv[1];
n = atoi(argv[2]);
if (n > 100)
exit(2);
- desthost = argv[3];
- if (argc == 3)
+
+ if (strcmp(argv[3], "default") == 0)
+ use_ussi = 0;
+ else if (strcmp(argv[3], "ussi") == 0)
+ use_ussi = 1;
+ else
+ printf("bad argv[3] '%s'", argv[3]);
+
+ if (argc == 4)
no_threads = 0;
else
no_threads = argv[4] != NULL && strcmp(argv[4], "nothreads") == 0;
-#ifdef VXWORKS
- no_threads = 1;
-#endif
ei_init();
for (i = 0; i < n; ++i) {
if (!no_threads) {
-#ifndef VXWORKS
#ifdef __WIN32__
unsigned tid;
threads[i] = (HANDLE)_beginthreadex(NULL, 0, einode_thread,
- (void*)i, 0, &tid);
-#else
- pthread_create(&threads[i], NULL, einode_thread, (void*)i);
-#endif
+ (void*)(size_t)i, 0, &tid);
#else
- ;
+ pthread_create(&threads[i], NULL, einode_thread, (void*)(size_t)i);
#endif
} else
- einode_thread((void*)i);
+ einode_thread((void*)(size_t)i);
}
if (!no_threads)
-#ifndef VXWORKS
for (i = 0; i < n; ++i) {
#ifdef __WIN32__
if (WaitForSingleObject(threads[i], INFINITE) != WAIT_OBJECT_0)
@@ -207,9 +207,6 @@ MAIN(int argc, char *argv[])
#endif
printf("bad wait thread %d\n", i);
}
-#else
- ;
-#endif
printf("ok\n");
return 0;
}