8
8
#include <assert.h>
9
9
#include <math.h>
10
10
11
- int v_called = 0 ;
11
+ _Atomic int v_called = 0 ;
12
12
void v () {
13
13
assert (emscripten_is_main_runtime_thread ());
14
14
emscripten_outf ("Hello!" );
15
15
v_called = 1 ;
16
16
}
17
17
18
- int vi_called = 0 ;
18
+ _Atomic int vi_called = 0 ;
19
19
void vi (int param0 ) {
20
20
assert (emscripten_is_main_runtime_thread ());
21
21
emscripten_outf ("Hello %d!" , param0 );
22
22
vi_called = 1 ;
23
23
}
24
24
25
- int vii_called = 0 ;
25
+ _Atomic int vii_called = 0 ;
26
26
void vii (int param0 , int param1 ) {
27
27
assert (emscripten_is_main_runtime_thread ());
28
28
emscripten_outf ("Hello %d %d!" , param0 , param1 );
29
29
vii_called = 1 ;
30
30
}
31
31
32
- int viii_called = 0 ;
32
+ _Atomic int viii_called = 0 ;
33
33
void viii (int param0 , int param1 , int param2 ) {
34
34
assert (emscripten_is_main_runtime_thread ());
35
35
emscripten_outf ("Hello %d %d %d!" , param0 , param1 , param2 );
36
36
viii_called = 1 ;
37
37
}
38
38
39
- int i_called = 0 ;
39
+ _Atomic int i_called = 0 ;
40
40
int i () {
41
41
assert (emscripten_is_main_runtime_thread ());
42
42
emscripten_outf ("Hello i!" );
43
43
i_called = 1 ;
44
44
return 84 ;
45
45
}
46
46
47
- int ii_called = 0 ;
47
+ _Atomic int ii_called = 0 ;
48
48
int ii (int param0 ) {
49
49
assert (emscripten_is_main_runtime_thread ());
50
50
emscripten_outf ("Hello ii %d!" , param0 );
51
51
ii_called = 1 ;
52
52
return 85 ;
53
53
}
54
54
55
- int iii_called = 0 ;
55
+ _Atomic int iii_called = 0 ;
56
56
int iii (int param0 , int param1 ) {
57
57
assert (emscripten_is_main_runtime_thread ());
58
58
emscripten_outf ("Hello iii %d %d!" , param0 , param1 );
59
59
iii_called = 1 ;
60
60
return 86 ;
61
61
}
62
62
63
- int iiii_called = 0 ;
63
+ _Atomic int iiii_called = 0 ;
64
64
int iiii (int param0 , int param1 , int param2 ) {
65
65
assert (emscripten_is_main_runtime_thread ());
66
66
emscripten_outf ("Hello iiii %d %d %d!" , param0 , param1 , param2 );
67
67
iiii_called = 1 ;
68
68
return 87 ;
69
69
}
70
70
71
+ void reset_state () {
72
+ v_called = vi_called = vii_called = viii_called = 0 ;
73
+ i_called = ii_called = iii_called = iiii_called = 0 ;
74
+ }
75
+
71
76
void test_sync () {
77
+ reset_state ();
72
78
emscripten_outf ("Testing sync proxied runs:" );
73
79
int ret ;
74
- v_called = 0 ; emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_V , v ); assert (v_called == 1 );
75
- vi_called = 0 ; emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_VI , vi , 42 ); assert (vi_called == 1 );
76
- vii_called = 0 ; emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_VII , vii , 42 , 43 ); assert (vii_called == 1 );
77
- viii_called = 0 ; emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_VIII , viii , 42 , 43 , 44 ); assert (viii_called == 1 );
78
- i_called = 0 ; ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_I , i ); assert (i_called == 1 ); assert (ret == 84 );
79
- ii_called = 0 ; ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_II , ii , 42 ); assert (ii_called == 1 ); assert (ret == 85 );
80
- iii_called = 0 ; ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_III , iii , 42 , 43 ); assert (iii_called == 1 ); assert (ret == 86 );
81
- iiii_called = 0 ; ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_IIII , iiii , 42 , 43 , 44 ); assert (iiii_called == 1 ); assert (ret == 87 );
80
+ emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_V , v ); assert (v_called == 1 );
81
+ emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_VI , vi , 42 ); assert (vi_called == 1 );
82
+ emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_VII , vii , 42 , 43 ); assert (vii_called == 1 );
83
+ emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_VIII , viii , 42 , 43 , 44 ); assert (viii_called == 1 );
84
+ ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_I , i ); assert (i_called == 1 ); assert (ret == 84 );
85
+ ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_II , ii , 42 ); assert (ii_called == 1 ); assert (ret == 85 );
86
+ ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_III , iii , 42 , 43 ); assert (iii_called == 1 ); assert (ret == 86 );
87
+ ret = emscripten_sync_run_in_main_runtime_thread (EM_FUNC_SIG_IIII , iiii , 42 , 43 , 44 ); assert (iiii_called == 1 ); assert (ret == 87 );
82
88
}
83
89
84
90
void test_async () {
91
+ reset_state ();
85
92
emscripten_outf ("Testing async proxied runs:" );
86
93
emscripten_async_run_in_main_runtime_thread (EM_FUNC_SIG_V , v );
87
94
emscripten_async_run_in_main_runtime_thread (EM_FUNC_SIG_VI , vi , 42 );
@@ -91,6 +98,12 @@ void test_async() {
91
98
emscripten_async_run_in_main_runtime_thread (EM_FUNC_SIG_II , ii , 42 );
92
99
emscripten_async_run_in_main_runtime_thread (EM_FUNC_SIG_III , iii , 42 , 43 );
93
100
emscripten_async_run_in_main_runtime_thread (EM_FUNC_SIG_IIII , iiii , 42 , 43 , 44 );
101
+
102
+ // Busy loop until all the async jobs are done
103
+ while (!(v_called && vi_called && vii_called && viii_called &&
104
+ i_called && ii_called && iii_called && iiii_called )) {
105
+ sched_yield ();
106
+ }
94
107
}
95
108
96
109
void test_async_waitable () {
0 commit comments