FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
emscripten/tests/pthread/test_pthread_cancel.cpp at incoming · JavaScriptIOT/emscripten · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
JavaScriptIOT
/
emscripten
Public
forked from
emscripten-core/emscripten
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
emscripten
/
tests
/
pthread
/
test_pthread_cancel.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
62 lines (56 loc) · 1.26 KB
Breadcrumbs
emscripten
/
tests
/
pthread
/
test_pthread_cancel.cpp
Copy path
File metadata and controls
62 lines (56 loc) · 1.26 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#
include
<
pthread.h
>
#
include
<
sys/types.h
>
#
include
<
stdio.h
>
#
include
<
stdlib.h
>
#
include
<
assert.h
>
#
include
<
unistd.h
>
#
include
<
errno.h
>
#
include
<
emscripten.h
>
#
include
<
emscripten/threading.h
>
volatile
int
res =
43
;
static
void
cleanup_handler
(
void
*arg)
{
EM_ASM
(Module[
'
print
'
](
'
Called clean-up handler with arg
'
+ $
0
), arg);
int
a = (
int
)arg;
res -= a;
}
static
void
*
thread_start
(
void
*arg)
{
pthread_cleanup_push
(cleanup_handler, (
void
*)
42
);
EM_ASM
(Module[
'
print
'
](
'
Thread started!
'
));
for
(;;)
{
pthread_testcancel
();
}
res =
1000
;
//
Shouldn't ever reach here.
pthread_cleanup_pop
(
0
);
}
pthread_t
thr;
int
main
()
{
if
(!
emscripten_has_threading_support
())
{
#
ifdef
REPORT_RESULT
REPORT_RESULT
(
1
);
#
endif
printf
(
"
Skipped: Threading is not supported.
\n
"
);
return
0
;
}
int
s =
pthread_create
(&thr,
NULL
, thread_start, (
void
*)
0
);
assert
(s ==
0
);
EM_ASM
(Module[
'
print
'
](
'
Canceling thread..
'
););
s =
pthread_cancel
(thr);
assert
(s ==
0
);
for
(;;)
{
int
result =
emscripten_atomic_load_u32
((
const
void
*)&res);
if
(result ==
1
)
{
EM_ASM_INT
( { Module[
'
print
'
](
'
After canceling, shared variable =
'
+ $
0
+
'
.
'
); }, result);
#
ifdef
REPORT_RESULT
REPORT_RESULT
(
1
);
#
endif
return
0
;
}
}
}
Back
|
FazBrowse Home
|
New Git URL