@@ -54,10 +54,19 @@ int emscripten_builtin_pthread_create(pthread_t *thread,
54
54
void *(*callback)(void *), void *arg);
55
55
}
56
56
57
+ struct ThreadStartParams {
58
+ thread_callback_t start_routine;
59
+ void *arg;
60
+ };
61
+
57
62
static thread_return_t THREAD_CALLING_CONV asan_thread_start (void *arg) {
58
63
AsanThread *t = (AsanThread *)arg;
59
64
SetCurrentThread (t);
60
- return t->ThreadStart (GetTid ());
65
+ t->ThreadStart (GetTid ());
66
+ ThreadStartParams params;
67
+ t->GetStartData (params);
68
+ auto res = (*params.start_routine )(params.arg );
69
+ return res;
61
70
}
62
71
63
72
INTERCEPTOR (int , pthread_create, pthread_t *thread,
@@ -72,8 +81,8 @@ INTERCEPTOR(int, pthread_create, pthread_t *thread,
72
81
pthread_attr_getdetachstate (attr, &detached);
73
82
74
83
u32 current_tid = GetCurrentTidOrInvalid ();
75
- AsanThread *t =
76
- AsanThread::Create (start_routine, arg , current_tid, &stack, detached);
84
+ ThreadStartParams params = {start_routine, arg};
85
+ AsanThread* t = AsanThread::Create (params , current_tid, &stack, detached);
77
86
78
87
int result;
79
88
{
0 commit comments