From 005fbcd9f7be3864bf88238b90f246584ffb2b25 Mon Sep 17 00:00:00 2001
From: Yuta Saito <kateinoigakukun@gmail.com>
Date: Wed, 7 May 2025 09:46:59 +0800
Subject: [PATCH 1/2] Fix null-ptr write with `pthread_create`

The `pthread_create` function was called with a null pointer for the
`thread` argument, which is not allowed and led to a memory-write at
0x0.
---
 Sources/JavaScriptEventLoop/WebWorkerTaskExecutor.swift | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Sources/JavaScriptEventLoop/WebWorkerTaskExecutor.swift b/Sources/JavaScriptEventLoop/WebWorkerTaskExecutor.swift
index 47367bc7..1078244f 100644
--- a/Sources/JavaScriptEventLoop/WebWorkerTaskExecutor.swift
+++ b/Sources/JavaScriptEventLoop/WebWorkerTaskExecutor.swift
@@ -412,8 +412,9 @@ public final class WebWorkerTaskExecutor: TaskExecutor {
                 let unmanagedContext = Unmanaged.passRetained(context)
                 contexts.append(unmanagedContext)
                 let ptr = unmanagedContext.toOpaque()
+                var thread = pthread_t(bitPattern: 0)
                 let ret = pthread_create(
-                    nil,
+                    &thread,
                     nil,
                     { ptr in
                         // Cast to a optional pointer to absorb nullability variations between platforms.

From 50cfddce9641034df22d667383211e03a140e9cb Mon Sep 17 00:00:00 2001
From: Yuta Saito <kateinoigakukun@gmail.com>
Date: Wed, 7 May 2025 10:01:22 +0800
Subject: [PATCH 2/2] Relax the timinig requirements in
 `JavaScriptEventLoopTests/testPromiseThen`

---
 Tests/JavaScriptEventLoopTests/JavaScriptEventLoopTests.swift | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Tests/JavaScriptEventLoopTests/JavaScriptEventLoopTests.swift b/Tests/JavaScriptEventLoopTests/JavaScriptEventLoopTests.swift
index 866b3945..4224e2a6 100644
--- a/Tests/JavaScriptEventLoopTests/JavaScriptEventLoopTests.swift
+++ b/Tests/JavaScriptEventLoopTests/JavaScriptEventLoopTests.swift
@@ -157,7 +157,7 @@ final class JavaScriptEventLoopTests: XCTestCase {
             let result = try await promise2.value
             XCTAssertEqual(result, .string("3.0"))
         }
-        XCTAssertGreaterThanOrEqual(thenDiff, 200)
+        XCTAssertGreaterThanOrEqual(thenDiff, 150)
     }
 
     func testPromiseThenWithFailure() async throws {