Update zeromq patches for mingw

This commit is contained in:
Jason Rhinelander 2020-09-16 13:14:24 -03:00
parent b48a654abc
commit 5ba6197d59
4 changed files with 14 additions and 115 deletions

View File

@ -461,9 +461,8 @@ build_external(sodium)
add_static_target(sodium sodium_external libsodium.a)
if(ZMQ_VERSION VERSION_LESS 4.3.3 AND CMAKE_CROSSCOMPILING AND ARCH_TRIPLET MATCHES mingw)
set(zmq_patch PATCH_COMMAND patch -p1 -i ${PROJECT_SOURCE_DIR}/utils/build_scripts/libzmq-pr3601-mingw-build-fix.patch
COMMAND patch -p1 -i ${PROJECT_SOURCE_DIR}/utils/build_scripts/libzmq-pr3613-fix-funcptr-call.patch)
if(ZMQ_VERSION VERSION_LESS 4.3.4 AND CMAKE_CROSSCOMPILING AND ARCH_TRIPLET MATCHES mingw)
set(zmq_patch PATCH_COMMAND patch -p1 -i ${PROJECT_SOURCE_DIR}/utils/build_scripts/libzmq-mingw-closesocket.patch)
endif()
build_external(zmq
DEPENDS sodium_external

View File

@ -0,0 +1,12 @@
diff --git a/tests/testutil.hpp b/tests/testutil.hpp
index c6f5e4de..6a1c8bb8 100644
--- a/tests/testutil.hpp
+++ b/tests/testutil.hpp
@@ -102,7 +102,6 @@ const uint8_t zmtp_ready_sub[27] = {
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdexcept>
-#define close closesocket
typedef int socket_size_t;
inline const char *as_setsockopt_opt_t (const void *opt)
{

View File

@ -1,69 +0,0 @@
diff --git a/src/thread.cpp b/src/thread.cpp
index b14d70757..3675899be 100644
--- a/src/thread.cpp
+++ b/src/thread.cpp
@@ -32,6 +32,10 @@
#include "thread.hpp"
#include "err.hpp"
+#ifdef ZMQ_HAVE_WINDOWS
+#include <winnt.h>
+#endif
+
bool zmq::thread_t::get_started () const
{
return _started;
@@ -113,10 +117,22 @@ struct thread_info_t
#pragma pack(pop)
}
+typedef struct _MY_EXCEPTION_REGISTRATION_RECORD
+{
+ struct _MY_EXCEPTION_REGISTRATION_RECORD *Next;
+ void *Handler;
+} MY_EXCEPTION_REGISTRATION_RECORD;
+
+static EXCEPTION_DISPOSITION NTAPI continue_execution (EXCEPTION_RECORD *rec,
+ void *frame, CONTEXT *ctx, void *disp)
+{
+ return ExceptionContinueExecution;
+}
+
void zmq::thread_t::
applyThreadName () // to be called in secondary thread context
{
- if (!_name[0])
+ if (!_name[0] || !IsDebuggerPresent())
return;
thread_info_t thread_info;
@@ -125,17 +141,19 @@ void zmq::thread_t::
thread_info._thread_id = -1;
thread_info._flags = 0;
-#pragma warning(push)
-#pragma warning(disable : 6320 6322)
- __try {
- DWORD MS_VC_EXCEPTION = 0x406D1388;
+ NT_TIB *tib = ((NT_TIB*)NtCurrentTeb());
+
+ MY_EXCEPTION_REGISTRATION_RECORD rec;
+ rec.Next = (MY_EXCEPTION_REGISTRATION_RECORD *)tib->ExceptionList;
+ rec.Handler = continue_execution;
+
+ // push our handler, raise, and finally pop our handler
+ tib->ExceptionList = (_EXCEPTION_REGISTRATION_RECORD *)&rec;
+ DWORD MS_VC_EXCEPTION = 0x406D1388;
RaiseException (MS_VC_EXCEPTION, 0,
- sizeof (thread_info) / sizeof (ULONG_PTR),
- (ULONG_PTR *) &thread_info);
- }
- __except (EXCEPTION_CONTINUE_EXECUTION) {
- }
-#pragma warning(pop)
+ sizeof (thread_info) / sizeof (ULONG_PTR),
+ (ULONG_PTR *) &thread_info);
+ tib->ExceptionList = (_EXCEPTION_REGISTRATION_RECORD *)(((MY_EXCEPTION_REGISTRATION_RECORD *)tib->ExceptionList)->Next);
}
#elif defined ZMQ_HAVE_VXWORKS

View File

@ -1,43 +0,0 @@
diff --git a/RELICENSE/tomzbench.md b/RELICENSE/tomzbench.md
new file mode 100644
index 000000000..1cbcc4fdb
--- /dev/null
+++ b/RELICENSE/tomzbench.md
@@ -0,0 +1,14 @@
+# Permission to Relicense under MPLv2
+
+This is a statement by Thomas Chiantia
+that grants permission to relicense its copyrights in the libzmq C++
+library (ZeroMQ) under the Mozilla Public License v2 (MPLv2).
+
+A portion of the commits made by the Github handle "tomzbench", with
+commit author "Thomas<Thomas@Altronix.com>", are copyright of
+Thomas Chiantia.
+This document hereby grants the libzmq project team to relicense libzmq,
+including all past, present and future contributions of the author listed above.
+
+Thomas Chiantia
+2019/08/10
diff --git a/src/thread.cpp b/src/thread.cpp
index 2cad2adaa..6f07e9cee 100644
--- a/src/thread.cpp
+++ b/src/thread.cpp
@@ -117,11 +117,14 @@ struct thread_info_t
#pragma pack(pop)
}
-typedef struct _MY_EXCEPTION_REGISTRATION_RECORD
+struct MY_EXCEPTION_REGISTRATION_RECORD
{
- struct _MY_EXCEPTION_REGISTRATION_RECORD *Next;
- void *Handler;
-} MY_EXCEPTION_REGISTRATION_RECORD;
+ typedef EXCEPTION_DISPOSITION (NTAPI *HandlerFunctionType) (
+ EXCEPTION_RECORD *, void *, CONTEXT *, void *);
+
+ MY_EXCEPTION_REGISTRATION_RECORD *Next;
+ HandlerFunctionType Handler;
+};
static EXCEPTION_DISPOSITION NTAPI continue_execution (EXCEPTION_RECORD *rec,
void *frame,