[libxml2] Merge testThreadsWin32.c into testThreads.c
- From: Nick Wellnhofer <nwellnhof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libxml2] Merge testThreadsWin32.c into testThreads.c
- Date: Sun, 6 Jan 2019 13:45:49 +0000 (UTC)
commit 57d4329bd7440257929b763914bcb5439f53f1f5
Author: Nick Wellnhofer <wellnhofer aevum de>
Date: Tue Jan 23 17:33:42 2018 +0100
Merge testThreadsWin32.c into testThreads.c
Apply the same cross-platform modifications as previously in runtest.c.
Makefile.am | 6 +--
bakefile/libxml2.bkl | 5 +-
doc/apibuild.py | 1 -
testThreads.c | 133 ++++++++++++++++++++++++++++++++++-----------
testThreadsWin32.c | 150 ---------------------------------------------------
win32/Makefile.bcb | 4 +-
win32/Makefile.mingw | 11 +---
win32/Makefile.msvc | 4 +-
8 files changed, 107 insertions(+), 207 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 9c630be4..174b9843 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -126,11 +126,7 @@ testC14N_LDFLAGS =
testC14N_DEPENDENCIES = $(DEPS)
testC14N_LDADD= $(LDADDS)
-if THREADS_W32
-testThreads_SOURCES = testThreadsWin32.c
-else
testThreads_SOURCES = testThreads.c
-endif
testThreads_LDFLAGS =
testThreads_DEPENDENCIES = $(DEPS)
testThreads_LDADD= $(BASE_THREAD_LIBS) $(LDADDS)
@@ -1253,7 +1249,7 @@ EXTRA_DIST = xml2-config.in xml2Conf.sh.in libxml.spec.in libxml2.spec \
libxml2-config.cmake.in autogen.sh \
trionan.c trionan.h triostr.c triostr.h trio.c trio.h \
triop.h triodef.h libxml.h elfgcchack.h xzlib.h buf.h \
- enc.h save.h testThreadsWin32.c genUnicode.py TODO_SCHEMAS \
+ enc.h save.h genUnicode.py TODO_SCHEMAS \
dbgen.pl dbgenattr.pl regressions.py regressions.xml \
README.tests Makefile.tests libxml2.syms timsort.h \
README.zOS \
diff --git a/bakefile/libxml2.bkl b/bakefile/libxml2.bkl
index dd6ce2c2..fa2d285e 100644
--- a/bakefile/libxml2.bkl
+++ b/bakefile/libxml2.bkl
@@ -736,12 +736,9 @@ $(TAB)copy "$(DOLLAR)(InputPath)" ..\$(CONFIG_DSTNAME)
<!-- FIXME:
<exe id="testModule"
template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testModule.c</sources></exe>
- <if cond="WITH_THREADS=='posix'">
+ <if cond="WITH_THREADS!='no'">
<exe id="testThreads"
template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testThreads.c</sources></exe>
</if>
- <if cond="WITH_THREADS=='ctls' or WITH_THREADS=='native'">
- <exe id="testThreadsWin32"
template="xml2test"><sources>$(XMLBASEDIR)$(DIRSEP)testThreadsWin32.c</sources></exe>
- </if>
-->
</if>
diff --git a/doc/apibuild.py b/doc/apibuild.py
index 7a364663..7c69a537 100755
--- a/doc/apibuild.py
+++ b/doc/apibuild.py
@@ -42,7 +42,6 @@ ignored_files = {
"testThreads.c": "test tool",
"testC14N.c": "test tool",
"testRelax.c": "test tool",
- "testThreadsWin32.c": "test tool",
"testSAX.c": "test tool",
"testURI.c": "test tool",
"testapi.c": "generated regression tests",
diff --git a/testThreads.c b/testThreads.c
index 2ef70a74..bef65377 100644
--- a/testThreads.c
+++ b/testThreads.c
@@ -10,6 +10,8 @@
#include <libxml/catalog.h>
#ifdef HAVE_PTHREAD_H
#include <pthread.h>
+#elif defined HAVE_WIN32_THREADS
+#include <windows.h>
#elif defined HAVE_BEOS_THREADS
#include <OS.h>
#endif
@@ -20,25 +22,32 @@
#include <assert.h>
#define MAX_ARGC 20
+#define TEST_REPEAT_COUNT 500
#ifdef HAVE_PTHREAD_H
static pthread_t tid[MAX_ARGC];
+#elif defined HAVE_WIN32_THREADS
+static HANDLE tid[MAX_ARGC];
#elif defined HAVE_BEOS_THREADS
static thread_id tid[MAX_ARGC];
#endif
+typedef struct {
+ const char *filename;
+ int okay;
+} xmlThreadParams;
+
static const char *catalog = "test/threads/complex.xml";
-static const char *testfiles[] = {
- "test/threads/abc.xml",
- "test/threads/acb.xml",
- "test/threads/bac.xml",
- "test/threads/bca.xml",
- "test/threads/cab.xml",
- "test/threads/cba.xml",
- "test/threads/invalid.xml",
+static xmlThreadParams threadParams[] = {
+ { "test/threads/abc.xml", 0 },
+ { "test/threads/acb.xml", 0 },
+ { "test/threads/bac.xml", 0 },
+ { "test/threads/bca.xml", 0 },
+ { "test/threads/cab.xml", 0 },
+ { "test/threads/cba.xml", 0 },
+ { "test/threads/invalid.xml", 0 }
};
-
-static const char *Okay = "OK";
-static const char *Failed = "Failed";
+static const unsigned int num_threads = sizeof(threadParams) /
+ sizeof(threadParams[0]);
#ifndef xmlDoValidityCheckingDefaultValue
#error xmlDoValidityCheckingDefaultValue is not a macro
@@ -51,7 +60,8 @@ static void *
thread_specific_data(void *private_data)
{
xmlDocPtr myDoc;
- const char *filename = (const char *) private_data;
+ xmlThreadParams *params = (xmlThreadParams *) private_data;
+ const char *filename = params->filename;
int okay = 1;
if (!strcmp(filename, "test/threads/invalid.xml")) {
@@ -91,9 +101,8 @@ thread_specific_data(void *private_data)
okay = 0;
}
}
- if (okay == 0)
- return((void *) Failed);
- return ((void *) Okay);
+ params->okay = okay;
+ return(NULL);
}
#ifdef HAVE_PTHREAD_H
@@ -101,27 +110,25 @@ int
main(void)
{
unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- void *results[MAX_ARGC];
int ret;
xmlInitParser();
- for (repeat = 0;repeat < 500;repeat++) {
+ for (repeat = 0;repeat < TEST_REPEAT_COUNT;repeat++) {
xmlLoadCatalog(catalog);
- memset(results, 0, sizeof(*results)*num_threads);
memset(tid, 0xff, sizeof(*tid)*num_threads);
for (i = 0; i < num_threads; i++) {
ret = pthread_create(&tid[i], NULL, thread_specific_data,
- (void *) testfiles[i]);
+ (void *) &threadParams[i]);
if (ret != 0) {
perror("pthread_create");
exit(1);
}
}
for (i = 0; i < num_threads; i++) {
- ret = pthread_join(tid[i], &results[i]);
+ void *result;
+ ret = pthread_join(tid[i], &result);
if (ret != 0) {
perror("pthread_join");
exit(1);
@@ -130,35 +137,97 @@ main(void)
xmlCatalogCleanup();
for (i = 0; i < num_threads; i++)
- if (results[i] != (void *) Okay)
- printf("Thread %d handling %s failed\n", i, testfiles[i]);
+ if (threadParams[i].okay == 0)
+ printf("Thread %d handling %s failed\n", i,
+ threadParams[i].filename);
}
xmlCleanupParser();
xmlMemoryDump();
return (0);
}
+#elif defined HAVE_WIN32_THREADS
+static DWORD WINAPI
+win32_thread_specific_data(void *private_data)
+{
+ thread_specific_data(private_data);
+ return(0);
+}
+
+int
+main(void)
+{
+ unsigned int i, repeat;
+ BOOL ret;
+
+ xmlInitParser();
+ for (repeat = 0;repeat < TEST_REPEAT_COUNT;repeat++)
+ {
+ xmlLoadCatalog(catalog);
+
+ for (i = 0; i < num_threads; i++)
+ {
+ tid[i] = (HANDLE) -1;
+ }
+
+ for (i = 0; i < num_threads; i++)
+ {
+ DWORD useless;
+ tid[i] = CreateThread(NULL, 0,
+ win32_thread_specific_data, &threadParams[i], 0, &useless);
+ if (tid[i] == NULL)
+ {
+ perror("CreateThread");
+ exit(1);
+ }
+ }
+
+ if (WaitForMultipleObjects (num_threads, tid, TRUE, INFINITE) == WAIT_FAILED)
+ perror ("WaitForMultipleObjects failed");
+
+ for (i = 0; i < num_threads; i++)
+ {
+ DWORD exitCode;
+ ret = GetExitCodeThread (tid[i], &exitCode);
+ if (ret == 0)
+ {
+ perror("GetExitCodeThread");
+ exit(1);
+ }
+ CloseHandle (tid[i]);
+ }
+
+ xmlCatalogCleanup();
+ for (i = 0; i < num_threads; i++) {
+ if (threadParams[i].okay == 0)
+ printf("Thread %d handling %s failed\n", i,
+ threadParams[i].filename);
+ }
+ }
+
+ xmlCleanupParser();
+ xmlMemoryDump();
+
+ return (0);
+}
#elif defined HAVE_BEOS_THREADS
int
main(void)
{
unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- void *results[MAX_ARGC];
status_t ret;
xmlInitParser();
printf("Parser initialized\n");
- for (repeat = 0;repeat < 500;repeat++) {
+ for (repeat = 0;repeat < TEST_REPEAT_COUNT;repeat++) {
printf("repeat: %d\n",repeat);
xmlLoadCatalog(catalog);
printf("loaded catalog: %s\n", catalog);
for (i = 0; i < num_threads; i++) {
- results[i] = NULL;
tid[i] = (thread_id) -1;
}
printf("cleaned threads\n");
for (i = 0; i < num_threads; i++) {
- tid[i] = spawn_thread(thread_specific_data, "xmlTestThread", B_NORMAL_PRIORITY, (void *)
testfiles[i]);
+ tid[i] = spawn_thread(thread_specific_data, "xmlTestThread", B_NORMAL_PRIORITY, (void *)
&threadParams[i]);
if (tid[i] < B_OK) {
perror("beos_thread_create");
exit(1);
@@ -166,7 +235,8 @@ main(void)
printf("beos_thread_create %d -> %d\n", i, tid[i]);
}
for (i = 0; i < num_threads; i++) {
- ret = wait_for_thread(tid[i], &results[i]);
+ void *result;
+ ret = wait_for_thread(tid[i], &result);
printf("beos_thread_wait %d -> %d\n", i, ret);
if (ret != B_OK) {
perror("beos_thread_wait");
@@ -177,8 +247,9 @@ main(void)
xmlCatalogCleanup();
ret = B_OK;
for (i = 0; i < num_threads; i++)
- if (results[i] != (void *) Okay) {
- printf("Thread %d handling %s failed\n", i, testfiles[i]);
+ if (threadParams[i].okay == 0) {
+ printf("Thread %d handling %s failed\n", i,
+ threadParams[i].filename);
ret = B_ERROR;
}
}
diff --git a/win32/Makefile.bcb b/win32/Makefile.bcb
index 41002da5..d326fb99 100644
--- a/win32/Makefile.bcb
+++ b/win32/Makefile.bcb
@@ -225,9 +225,7 @@ UTILS = $(BINDIR)\xmllint.exe\
$(BINDIR)\testlimits.exe
-!if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls" || "$(WITH_THREADS)" == "native"
-UTILS = $(UTILS) $(BINDIR)\testThreadsWin32.exe
-!else if "$(WITH_THREADS)" == "posix"
+!if "$(WITH_THREADS)" != "no"
UTILS = $(UTILS) $(BINDIR)\testThreads.exe
!endif
diff --git a/win32/Makefile.mingw b/win32/Makefile.mingw
index 3d4cb888..9dfa4abe 100644
--- a/win32/Makefile.mingw
+++ b/win32/Makefile.mingw
@@ -220,16 +220,7 @@ UTILS = $(BINDIR)/xmllint.exe\
$(BINDIR)/testapi.exe\
$(BINDIR)/testlimits.exe
-ifeq ($(WITH_THREADS),yes)
-UTILS += $(BINDIR)/testThreadsWin32.exe
-endif
-ifeq ($(WITH_THREADS),ctls)
-UTILS += $(BINDIR)/testThreadsWin32.exe
-endif
-ifeq ($(WITH_THREADS),native)
-UTILS += $(BINDIR)/testThreadsWin32.exe
-endif
-ifeq ($(WITH_THREADS),posix)
+ifneq ($(WITH_THREADS),no)
UTILS += $(BINDIR)/testThreads.exe
endif
diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc
index ee4250af..f6a0182d 100644
--- a/win32/Makefile.msvc
+++ b/win32/Makefile.msvc
@@ -274,9 +274,7 @@ UTILS = $(BINDIR)\xmllint.exe\
$(BINDIR)\testlimits.exe\
$(BINDIR)\testrecurse.exe
-!if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls" || "$(WITH_THREADS)" == "native"
-UTILS = $(UTILS) $(BINDIR)\testThreadsWin32.exe
-!else if "$(WITH_THREADS)" == "posix"
+!if "$(WITH_THREADS)" != "no"
UTILS = $(UTILS) $(BINDIR)\testThreads.exe
!endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]