1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "napi/native_api.h"
17 #include <csignal>
18 #include <cstdio>
19 #include <cstdlib>
20 #include <ctime>
21 #include <pthread.h>
22 #include <sys/time.h>
23 #include <unistd.h>
24
25 #define ATTR_INIT_FAIL (-99)
26 #define ATTR_SETSTACK_FAIL (-98)
27 #define BARRIER_INIT_FAIL (-97)
28 #define CREATE_ERROR (-96)
29 #define JOIN_ERROR (-95)
30 #define BARRIERATTR_INIT_FAIL (-94)
31 #define CONDATTR_INIT_FAIL (-93)
32 #define KEY_CREATE_ERROR (-92)
33 #define LOCK_FAIL (-91)
34 #define RWLOCK_INIT_ERROR (-90)
35 #define RWLOCK_RDLOCK_ERROR (-89)
36 #define RWLOCKATTR_INIT_ERROR (-88)
37 #define PAGE_SIZE_GET_FAIL (-87)
38 #define MEMALIGN_ERROR (-86)
39 #define EQUAL_RES 1
40 #define ERROR (-1)
41 #define NORMAL 0
42 #define TRUE 1
43 #define PARAM_0 0
44 #define PARAM_1 1
45 #define ONE 1
46 #define DEFAULTVALUE (-100)
47
48 #define STACK_SIZE 4096
49 #define THREADNUM 1
50 #define thousand 1000
51 #define THREAD_STACK_LEN 0x4001
52 #define GUARDSIZE 128
53 #define BARRIERNUM 1
54 #define SLEEPTIME 1
55
intInput(napi_env env, napi_callback_info info)56 static int intInput(napi_env env, napi_callback_info info)
57 {
58 size_t argc = PARAM_1;
59 napi_value args[1] = {nullptr};
60 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
61 int expect;
62 napi_get_value_int32(env, args[0], &expect);
63 return expect;
64 }
intOutput(napi_env env, int output)65 static napi_value intOutput(napi_env env, int output)
66 {
67 napi_value result;
68 napi_create_int32(env, output, &result);
69 return result;
70 }
71 static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
Prepare()72 static void Prepare() { pthread_mutex_lock(&lock); }
Parent()73 static void Parent() { pthread_mutex_unlock(&lock); }
child()74 static void child() { pthread_mutex_unlock(&lock); }
TestAtFork(int input)75 static int TestAtFork(int input)
76 {
77 int err = DEFAULTVALUE;
78 if (input == NORMAL) {
79 err = pthread_atfork(Prepare, Parent, child);
80 }
81 return err;
82 }
testAttrDestory(int input)83 static int testAttrDestory(int input)
84 {
85 int err = DEFAULTVALUE;
86 pthread_attr_t attr;
87 if (input == NORMAL) {
88 err = pthread_attr_init(&attr);
89 if (err != NORMAL) {
90 return ATTR_INIT_FAIL;
91 }
92 }
93 if (input == NORMAL) {
94 err = pthread_attr_destroy(&attr);
95 }
96 return err;
97 }
PThreadAtFork(napi_env env, napi_callback_info info)98 static napi_value PThreadAtFork(napi_env env, napi_callback_info info)
99 {
100 int input = intInput(env, info);
101 int result = TestAtFork(input);
102 return intOutput(env, result);
103 }
PThreadAttrDestory(napi_env env, napi_callback_info info)104 static napi_value PThreadAttrDestory(napi_env env, napi_callback_info info)
105 {
106 int input = intInput(env, info);
107 int result = testAttrDestory(input);
108 return intOutput(env, result);
109 }
testAttrGetDetachState(int input)110 static int testAttrGetDetachState(int input)
111 {
112 int err = DEFAULTVALUE;
113 pthread_attr_t attr;
114 int state = PARAM_0;
115 if (input == NORMAL) {
116 err = pthread_attr_init(&attr);
117 if (err != NORMAL) {
118 return ATTR_INIT_FAIL;
119 }
120 }
121 if (input == NORMAL) {
122 err = pthread_attr_getdetachstate(&attr, &state);
123 }
124 return err;
125 }
PThreadAttrGetDetachState(napi_env env, napi_callback_info info)126 static napi_value PThreadAttrGetDetachState(napi_env env, napi_callback_info info)
127 {
128 int input = intInput(env, info);
129 int result = testAttrGetDetachState(input);
130 return intOutput(env, result);
131 }
TestAttrGetGuardSize(int input)132 static int TestAttrGetGuardSize(int input)
133 {
134 size_t size = PARAM_0;
135 int err = DEFAULTVALUE;
136 pthread_attr_t attr;
137 if (input == NORMAL) {
138 err = pthread_attr_init(&attr);
139 if (err != NORMAL) {
140 return ATTR_INIT_FAIL;
141 }
142 }
143 if (input == NORMAL) {
144 err = pthread_attr_getguardsize(&attr, &size);
145 }
146 return err;
147 }
PThreadAttrGetGuardSize(napi_env env, napi_callback_info info)148 static napi_value PThreadAttrGetGuardSize(napi_env env, napi_callback_info info)
149 {
150 int input = intInput(env, info);
151 int result = TestAttrGetGuardSize(input);
152 return intOutput(env, result);
153 }
TestAttrGetInheritSched(int input)154 static int TestAttrGetInheritSched(int input)
155 {
156 int result = ERROR;
157 int err = DEFAULTVALUE;
158 pthread_attr_t attr;
159 if (input == NORMAL) {
160 err = pthread_attr_init(&attr);
161 if (err != NORMAL) {
162 return ATTR_INIT_FAIL;
163 }
164 }
165 if (input == NORMAL) {
166 err = pthread_attr_getinheritsched(&attr, &result);
167 }
168 return err;
169 }
PThreadAttrGetInheritSched(napi_env env, napi_callback_info info)170 static napi_value PThreadAttrGetInheritSched(napi_env env, napi_callback_info info)
171 {
172 int input = intInput(env, info);
173 int result = TestAttrGetInheritSched(input);
174 return intOutput(env, result);
175 }
testAttrGetSchedParam(int input)176 static int testAttrGetSchedParam(int input)
177 {
178 struct sched_param getparam;
179 int err = DEFAULTVALUE;
180 pthread_attr_t attr;
181 if (input == NORMAL) {
182 err = pthread_attr_init(&attr);
183 if (err != NORMAL) {
184 return ATTR_INIT_FAIL;
185 }
186 }
187 if (input == NORMAL) {
188 err = pthread_attr_getschedparam(&attr, &getparam);
189 }
190 return err;
191 }
PThreadAttrGetSchedParam(napi_env env, napi_callback_info info)192 static napi_value PThreadAttrGetSchedParam(napi_env env, napi_callback_info info)
193 {
194 int input = intInput(env, info);
195 int result = testAttrGetSchedParam(input);
196 return intOutput(env, result);
197 }
TestAttrGetSchedPolicy(int input)198 static int TestAttrGetSchedPolicy(int input)
199 {
200 int getpolicy = PARAM_0;
201 int err = DEFAULTVALUE;
202 pthread_attr_t attr;
203 if (input == NORMAL) {
204 err = pthread_attr_init(&attr);
205 if (err != NORMAL) {
206 return ATTR_INIT_FAIL;
207 }
208 }
209 if (input == NORMAL) {
210 err = pthread_attr_getschedpolicy(&attr, &getpolicy);
211 }
212 return err;
213 }
PThreadAttrGetSchedPolicy(napi_env env, napi_callback_info info)214 static napi_value PThreadAttrGetSchedPolicy(napi_env env, napi_callback_info info)
215 {
216 int input = intInput(env, info);
217 int result = TestAttrGetSchedPolicy(input);
218 return intOutput(env, result);
219 }
testAttrGetScope(int input)220 static int testAttrGetScope(int input)
221 {
222 int getscope = PARAM_0;
223 int err = DEFAULTVALUE;
224 pthread_attr_t attr;
225 if (input == NORMAL) {
226 err = pthread_attr_init(&attr);
227 if (err != NORMAL) {
228 return ATTR_INIT_FAIL;
229 }
230 }
231 if (input == NORMAL) {
232 err = pthread_attr_getscope(&attr, &getscope);
233 }
234 return err;
235 }
PThreadAttrGetScope(napi_env env, napi_callback_info info)236 static napi_value PThreadAttrGetScope(napi_env env, napi_callback_info info)
237 {
238 int input = intInput(env, info);
239 int result = testAttrGetScope(input);
240 return intOutput(env, result);
241 }
TestAttrGetStack(int input)242 static int TestAttrGetStack(int input)
243 {
244 void *stack = nullptr;
245 size_t stacksize = PARAM_0;
246 int err = DEFAULTVALUE;
247 pthread_attr_t attr;
248 if (input == NORMAL) {
249 err = pthread_attr_init(&attr);
250 if (err != NORMAL) {
251 return ATTR_INIT_FAIL;
252 }
253 }
254 if (input == NORMAL) {
255 err = pthread_attr_setstack(&attr, stack, STACK_SIZE);
256 if (err != NORMAL) {
257 return ATTR_SETSTACK_FAIL;
258 }
259 }
260 if (input == NORMAL) {
261 err = pthread_attr_getstack(&attr, &stack, &stacksize);
262 }
263 return err;
264 }
PThreadAttrGetStack(napi_env env, napi_callback_info info)265 static napi_value PThreadAttrGetStack(napi_env env, napi_callback_info info)
266 {
267 int input = intInput(env, info);
268 int result = TestAttrGetStack(input);
269 return intOutput(env, result);
270 }
TestAttrGetStackSize(int input)271 static int TestAttrGetStackSize(int input)
272 {
273 size_t stacksize = PARAM_0;
274 int err = DEFAULTVALUE;
275 pthread_attr_t attr;
276 if (input == NORMAL) {
277 err = pthread_attr_init(&attr);
278 if (err != NORMAL) {
279 return ATTR_INIT_FAIL;
280 }
281 }
282 if (input == NORMAL) {
283 err = pthread_attr_getstacksize(&attr, &stacksize);
284 }
285 return err;
286 }
PThreadAttrGetStackSize(napi_env env, napi_callback_info info)287 static napi_value PThreadAttrGetStackSize(napi_env env, napi_callback_info info)
288 {
289 int input = intInput(env, info);
290 int result = TestAttrGetStackSize(input);
291 return intOutput(env, result);
292 }
testAttrInit(int input)293 static int testAttrInit(int input)
294 {
295 int err = DEFAULTVALUE;
296 pthread_attr_t attr;
297 if (input == NORMAL) {
298 err = pthread_attr_init(&attr);
299 }
300 return err;
301 }
PThreadAttrInit(napi_env env, napi_callback_info info)302 static napi_value PThreadAttrInit(napi_env env, napi_callback_info info)
303 {
304 int input = intInput(env, info);
305 int result = testAttrInit(input);
306 return intOutput(env, result);
307 }
testAttrSetDetachState(int input)308 static int testAttrSetDetachState(int input)
309 {
310 int err = DEFAULTVALUE;
311 pthread_attr_t attr;
312 if (input == NORMAL) {
313 err = pthread_attr_init(&attr);
314 if (err != NORMAL) {
315 return ATTR_INIT_FAIL;
316 }
317 }
318 if (input == NORMAL) {
319 err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
320 }
321 return err;
322 }
PThreadAttrSetDetachState(napi_env env, napi_callback_info info)323 static napi_value PThreadAttrSetDetachState(napi_env env, napi_callback_info info)
324 {
325 int input = intInput(env, info);
326 int result = testAttrSetDetachState(input);
327 return intOutput(env, result);
328 }
testAttrSetGuardSize(int input)329 static int testAttrSetGuardSize(int input)
330 {
331 int err = DEFAULTVALUE;
332 pthread_attr_t attr;
333 if (input == NORMAL) {
334 err = pthread_attr_init(&attr);
335 if (err != NORMAL) {
336 return ATTR_INIT_FAIL;
337 }
338 }
339 if (input == NORMAL) {
340 err = pthread_attr_setguardsize(&attr, GUARDSIZE);
341 }
342 return err;
343 }
PThreadAttrSetGuardSize(napi_env env, napi_callback_info info)344 static napi_value PThreadAttrSetGuardSize(napi_env env, napi_callback_info info)
345 {
346 int input = intInput(env, info);
347 int result = testAttrSetGuardSize(input);
348 return intOutput(env, result);
349 }
testAttrSetInheritSched(int input)350 static int testAttrSetInheritSched(int input)
351 {
352 int err = DEFAULTVALUE;
353 pthread_attr_t attr;
354 if (input == NORMAL) {
355 err = pthread_attr_init(&attr);
356 if (err != NORMAL) {
357 return ATTR_INIT_FAIL;
358 }
359 }
360 if (input == NORMAL) {
361 err = pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED);
362 }
363 return err;
364 }
PThreadAttrSetInheritSched(napi_env env, napi_callback_info info)365 static napi_value PThreadAttrSetInheritSched(napi_env env, napi_callback_info info)
366 {
367 int input = intInput(env, info);
368 int result = testAttrSetInheritSched(input);
369 return intOutput(env, result);
370 }
testAttrSetSchedParam(int input)371 static int testAttrSetSchedParam(int input)
372 {
373 struct sched_param setparam;
374 int err = DEFAULTVALUE;
375 pthread_attr_t attr;
376 if (input == NORMAL) {
377 err = pthread_attr_init(&attr);
378 if (err != NORMAL) {
379 return ATTR_INIT_FAIL;
380 }
381 }
382 if (input == NORMAL) {
383 err = pthread_attr_setschedparam(&attr, &setparam);
384 }
385 return err;
386 }
PThreadAttrSetSchedParam(napi_env env, napi_callback_info info)387 static napi_value PThreadAttrSetSchedParam(napi_env env, napi_callback_info info)
388 {
389 int input = intInput(env, info);
390 int result = testAttrSetSchedParam(input);
391 return intOutput(env, result);
392 }
testAttrSetSchedPolicy(int input)393 static int testAttrSetSchedPolicy(int input)
394 {
395 int err = DEFAULTVALUE;
396 pthread_attr_t attr;
397 if (input == NORMAL) {
398 err = pthread_attr_init(&attr);
399 if (err != NORMAL) {
400 return ATTR_INIT_FAIL;
401 }
402 }
403 if (input == NORMAL) {
404 err = pthread_attr_setschedpolicy(&attr, ONE);
405 }
406 return err;
407 }
PThreadAttrSetSchedPolicy(napi_env env, napi_callback_info info)408 static napi_value PThreadAttrSetSchedPolicy(napi_env env, napi_callback_info info)
409 {
410 int input = intInput(env, info);
411 int result = testAttrSetSchedPolicy(input);
412 return intOutput(env, result);
413 }
testAttrSetScope(int input)414 static int testAttrSetScope(int input)
415 {
416 int err = DEFAULTVALUE;
417 pthread_attr_t attr;
418 if (input == NORMAL) {
419 err = pthread_attr_init(&attr);
420 if (err != NORMAL) {
421 return ATTR_INIT_FAIL;
422 }
423 }
424 if (input == NORMAL) {
425 err = pthread_attr_setscope(&attr, PARAM_0);
426 }
427 return err;
428 }
PThreadAttrSetScope(napi_env env, napi_callback_info info)429 static napi_value PThreadAttrSetScope(napi_env env, napi_callback_info info)
430 {
431 int input = intInput(env, info);
432 int result = testAttrSetScope(input);
433 return intOutput(env, result);
434 }
testAttrSetStack(int input)435 static int testAttrSetStack(int input)
436 {
437 void *stackAddr = nullptr;
438
439 int err = DEFAULTVALUE;
440 pthread_attr_t attr;
441 if (input == NORMAL) {
442 err = pthread_attr_init(&attr);
443 if (err != NORMAL) {
444 return ATTR_INIT_FAIL;
445 }
446 }
447 int pageSize = getpagesize();
448 if (pageSize == PARAM_0) {
449 return PAGE_SIZE_GET_FAIL;
450 }
451 if (input == NORMAL) {
452 int ret = posix_memalign(&stackAddr, pageSize, THREAD_STACK_LEN);
453 if (ret != PARAM_0) {
454 return MEMALIGN_ERROR;
455 }
456 err = pthread_attr_setstack(&attr, stackAddr, STACK_SIZE);
457 }
458 return err;
459 }
PThreadAttrSetStack(napi_env env, napi_callback_info info)460 static napi_value PThreadAttrSetStack(napi_env env, napi_callback_info info)
461 {
462 int input = intInput(env, info);
463 int result = testAttrSetStack(input);
464 return intOutput(env, result);
465 }
testAttrSetStackSize(int input)466 static int testAttrSetStackSize(int input)
467 {
468 int err = DEFAULTVALUE;
469 pthread_attr_t attr;
470 if (input == NORMAL) {
471 err = pthread_attr_init(&attr);
472 if (err != NORMAL) {
473 return ATTR_INIT_FAIL;
474 }
475 }
476 if (input == NORMAL) {
477 err = pthread_attr_setstacksize(&attr, STACK_SIZE);
478 }
479 return err;
480 }
PThreadAttrSetStackSize(napi_env env, napi_callback_info info)481 static napi_value PThreadAttrSetStackSize(napi_env env, napi_callback_info info)
482 {
483 int input = intInput(env, info);
484 int result = testAttrSetStackSize(input);
485 return intOutput(env, result);
486 }
TestBarrierInit(int input)487 static int TestBarrierInit(int input)
488 {
489 int err = DEFAULTVALUE;
490 pthread_barrier_t barrierT;
491 pthread_barrierattr_t barrierAttr;
492 if (input == NORMAL) {
493 err = pthread_barrier_init(&barrierT, &barrierAttr, BARRIERNUM);
494 }
495 return err;
496 }
PThreadBarrierInit(napi_env env, napi_callback_info info)497 static napi_value PThreadBarrierInit(napi_env env, napi_callback_info info)
498 {
499 int input = intInput(env, info);
500 int result = TestBarrierInit(input);
501 return intOutput(env, result);
502 }
testBarrierDestroy(int input)503 static int testBarrierDestroy(int input)
504 {
505 unsigned int baInt = BARRIERNUM;
506 int err = DEFAULTVALUE;
507 pthread_barrier_t barrierT;
508 pthread_barrierattr_t barrierAttr;
509 if (input == NORMAL) {
510 err = pthread_barrier_init(&barrierT, &barrierAttr, baInt);
511 if (err != NORMAL) {
512 return BARRIER_INIT_FAIL;
513 }
514 }
515 if (input == NORMAL) {
516 err = pthread_barrier_destroy(&barrierT);
517 }
518 return err;
519 }
PThreadBarrierDestroy(napi_env env, napi_callback_info info)520 static napi_value PThreadBarrierDestroy(napi_env env, napi_callback_info info)
521 {
522 int input = intInput(env, info);
523 int result = testBarrierDestroy(input);
524 return intOutput(env, result);
525 }
526 pthread_barrier_t WaitBarrier;
threadFunc(void *)527 static void *threadFunc(void *)
528 {
529 pthread_barrier_wait(&WaitBarrier);
530 return nullptr;
531 }
testBarrierWait(int input)532 static int testBarrierWait(int input)
533 {
534 int err = DEFAULTVALUE;
535 pthread_t ids[THREADNUM];
536 if (input == NORMAL) {
537 err = pthread_barrier_init(&WaitBarrier, nullptr, THREADNUM);
538 if (err != NORMAL) {
539 return BARRIER_INIT_FAIL;
540 }
541 }
542 for (int i = PARAM_0; i < THREADNUM; i++) {
543 err = pthread_create(static_cast<pthread_t *>((&(ids[i]))), nullptr, threadFunc, nullptr);
544 if (err != NORMAL) {
545 return CREATE_ERROR;
546 }
547 }
548 for (int i = PARAM_0; i < THREADNUM; i++) {
549 err = pthread_join(ids[i], (void **)nullptr);
550 if (err != NORMAL) {
551 return JOIN_ERROR;
552 }
553 }
554 if (input == NORMAL) {
555 err = pthread_barrier_destroy(&WaitBarrier);
556 }
557 return PARAM_0;
558 }
PThreadBarrierWait(napi_env env, napi_callback_info info)559 static napi_value PThreadBarrierWait(napi_env env, napi_callback_info info)
560 {
561 int input = intInput(env, info);
562 int result = testBarrierWait(input);
563 return intOutput(env, result);
564 }
testBarrierAttrInit(int input)565 static int testBarrierAttrInit(int input)
566 {
567 int err = DEFAULTVALUE;
568 pthread_barrierattr_t barrierAttr;
569 if (input == NORMAL) {
570 err = pthread_barrierattr_init(&barrierAttr);
571 }
572 return err;
573 }
PThreadBarrierAttrInit(napi_env env, napi_callback_info info)574 static napi_value PThreadBarrierAttrInit(napi_env env, napi_callback_info info)
575 {
576 int input = intInput(env, info);
577 int result = testBarrierAttrInit(input);
578 return intOutput(env, result);
579 }
testBarrierAttrGetPShared(int input)580 static int testBarrierAttrGetPShared(int input)
581 {
582 int err = DEFAULTVALUE;
583 pthread_barrierattr_t barrierAttr;
584 int shared = PARAM_0;
585 if (input == NORMAL) {
586 err = pthread_barrierattr_init(&barrierAttr);
587 if (err != NORMAL) {
588 return BARRIERATTR_INIT_FAIL;
589 }
590 }
591 if (input == NORMAL) {
592 err = pthread_barrierattr_getpshared(&barrierAttr, &shared);
593 }
594 return err;
595 }
PThreadBarrierAttrGetPShared(napi_env env, napi_callback_info info)596 static napi_value PThreadBarrierAttrGetPShared(napi_env env, napi_callback_info info)
597 {
598 int input = intInput(env, info);
599 int result = testBarrierAttrGetPShared(input);
600 return intOutput(env, result);
601 }
testBarrierAttrDestroy(int input)602 static int testBarrierAttrDestroy(int input)
603 {
604 int err = DEFAULTVALUE;
605 pthread_barrierattr_t barrierAttr;
606 if (input == NORMAL) {
607 err = pthread_barrierattr_init(&barrierAttr);
608 if (err != NORMAL) {
609 return BARRIERATTR_INIT_FAIL;
610 }
611 }
612 if (input == NORMAL) {
613 err = pthread_barrierattr_destroy(&barrierAttr);
614 }
615 return err;
616 }
PThreadBarrierAttrDestroy(napi_env env, napi_callback_info info)617 static napi_value PThreadBarrierAttrDestroy(napi_env env, napi_callback_info info)
618 {
619 int input = intInput(env, info);
620 int result = testBarrierAttrDestroy(input);
621 return intOutput(env, result);
622 }
testBarrierAttrSetPShared(int input)623 static int testBarrierAttrSetPShared(int input)
624 {
625 int err = DEFAULTVALUE;
626 pthread_barrierattr_t barrierAttr;
627 if (input == NORMAL) {
628 err = pthread_barrierattr_init(&barrierAttr);
629 if (err != NORMAL) {
630 return BARRIERATTR_INIT_FAIL;
631 }
632 }
633 if (input == NORMAL) {
634 err = pthread_barrierattr_setpshared(&barrierAttr, PARAM_0);
635 }
636 return err;
637 }
PThreadBarrierAttrSetPShared(napi_env env, napi_callback_info info)638 static napi_value PThreadBarrierAttrSetPShared(napi_env env, napi_callback_info info)
639 {
640 int input = intInput(env, info);
641 int result = testBarrierAttrSetPShared(input);
642 return intOutput(env, result);
643 }
testCondInit(int input)644 static int testCondInit(int input)
645 {
646 int err = DEFAULTVALUE;
647 pthread_cond_t condT;
648 pthread_condattr_t condAttr;
649
650 if (input == NORMAL) {
651 err = pthread_cond_init(&condT, &condAttr);
652 }
653 return err;
654 }
PThreadCondInit(napi_env env, napi_callback_info info)655 static napi_value PThreadCondInit(napi_env env, napi_callback_info info)
656 {
657 int input = intInput(env, info);
658 int result = testCondInit(input);
659 return intOutput(env, result);
660 }
TestCondDestory(int input)661 static int TestCondDestory(int input)
662 {
663 int err = DEFAULTVALUE;
664 pthread_cond_t condT;
665 pthread_condattr_t condAttr;
666
667 if (input == NORMAL) {
668 err = pthread_cond_init(&condT, &condAttr);
669 err = pthread_cond_destroy(&condT);
670 }
671 return err;
672 }
PThreadCondDestroy(napi_env env, napi_callback_info info)673 static napi_value PThreadCondDestroy(napi_env env, napi_callback_info info)
674 {
675 int input = intInput(env, info);
676 int result = TestCondDestory(input);
677 return intOutput(env, result);
678 }
testCondBroadcast(int input)679 static int testCondBroadcast(int input)
680 {
681 int err = DEFAULTVALUE;
682 pthread_cond_t condT;
683 if (input == NORMAL) {
684 err = pthread_cond_broadcast(&condT);
685 }
686 return err;
687 }
PThreadCondBroadcast(napi_env env, napi_callback_info info)688 static napi_value PThreadCondBroadcast(napi_env env, napi_callback_info info)
689 {
690 int input = intInput(env, info);
691 int result = testCondBroadcast(input);
692 return intOutput(env, result);
693 }
testCondSignal(int input)694 static int testCondSignal(int input)
695 {
696 int err = DEFAULTVALUE;
697 pthread_cond_t condT;
698 if (input == NORMAL) {
699 err = pthread_cond_signal(&condT);
700 }
701 return err;
702 }
PThreadCondSignal(napi_env env, napi_callback_info info)703 static napi_value PThreadCondSignal(napi_env env, napi_callback_info info)
704 {
705 int input = intInput(env, info);
706 int result = testCondSignal(input);
707 return intOutput(env, result);
708 }
709 pthread_cond_t condTestCondWaits;
710 pthread_cond_t g_condTs;
threadFunc2(void *)711 static void *threadFunc2(void *)
712 {
713 sleep(SLEEPTIME);
714 pthread_cond_broadcast(&condTestCondWaits);
715 return nullptr;
716 }
717
testCondWait(int input)718 static int testCondWait(int input)
719 {
720 int err = DEFAULTVALUE;
721 pthread_t pid;
722 if (input == NORMAL) {
723 err = pthread_create(&pid, nullptr, threadFunc2, nullptr);
724 if (err != NORMAL) {
725 return CREATE_ERROR;
726 }
727 static pthread_mutex_t gmutex;
728 pthread_mutex_lock(&gmutex);
729 err = pthread_cond_wait(&condTestCondWaits, &gmutex);
730 }
731 return err;
732 }
PThreadCondWait(napi_env env, napi_callback_info info)733 static napi_value PThreadCondWait(napi_env env, napi_callback_info info)
734 {
735 int input = intInput(env, info);
736 int result = testCondWait(input);
737 return intOutput(env, result);
738 }
threadTimedWait(void *)739 static void *threadTimedWait(void *)
740 {
741 pthread_mutex_t gmutex;
742 timeval now;
743 timespec outTime;
744 pthread_mutex_lock(&gmutex);
745 gettimeofday(&now, nullptr);
746 outTime.tv_sec = now.tv_sec + 1;
747 outTime.tv_nsec = now.tv_usec * thousand;
748 pthread_cond_timedwait(&g_condTs, &gmutex, &outTime);
749 return nullptr;
750 }
testCondTimedWait(int input)751 static int testCondTimedWait(int input)
752 {
753 int err = PARAM_0;
754 pthread_t pid;
755 if (input == PARAM_0) {
756 err = pthread_create(&pid, nullptr, threadTimedWait, nullptr);
757 if (err != NORMAL) {
758 return CREATE_ERROR;
759 }
760 }
761 return err;
762 }
PThreadCondTimedWait(napi_env env, napi_callback_info info)763 static napi_value PThreadCondTimedWait(napi_env env, napi_callback_info info)
764 {
765 int input = intInput(env, info);
766 int result = testCondTimedWait(input);
767 return intOutput(env, result);
768 }
testCondAttrInit(int input)769 static int testCondAttrInit(int input)
770 {
771 int err = DEFAULTVALUE;
772 pthread_condattr_t condAttr;
773 if (input == NORMAL) {
774 err = pthread_condattr_init(&condAttr);
775 }
776 return err;
777 }
PThreadCondAttrInit(napi_env env, napi_callback_info info)778 static napi_value PThreadCondAttrInit(napi_env env, napi_callback_info info)
779 {
780 int input = intInput(env, info);
781 int result = testCondAttrInit(input);
782 return intOutput(env, result);
783 }
testCondAttrDestroy(int input)784 static int testCondAttrDestroy(int input)
785 {
786 int err = DEFAULTVALUE;
787 pthread_condattr_t condAttr;
788 if (input == NORMAL) {
789 err = pthread_condattr_init(&condAttr);
790 if (err != NORMAL) {
791 return CONDATTR_INIT_FAIL;
792 }
793 err = pthread_condattr_destroy(&condAttr);
794 }
795 return err;
796 }
PThreadCondAttrDestroy(napi_env env, napi_callback_info info)797 static napi_value PThreadCondAttrDestroy(napi_env env, napi_callback_info info)
798 {
799 int input = intInput(env, info);
800 int result = testCondAttrDestroy(input);
801 return intOutput(env, result);
802 }
TestCondAttrGetClock(int input)803 static int TestCondAttrGetClock(int input)
804 {
805 int err = DEFAULTVALUE;
806 pthread_condattr_t condAttr;
807 clockid_t clockid;
808 if (input == NORMAL) {
809 err = pthread_condattr_init(&condAttr);
810 if (err != NORMAL) {
811 return CONDATTR_INIT_FAIL;
812 }
813 err = pthread_condattr_getclock(&condAttr, &clockid);
814 }
815 return err;
816 }
PThreadCondAttrGetClock(napi_env env, napi_callback_info info)817 static napi_value PThreadCondAttrGetClock(napi_env env, napi_callback_info info)
818 {
819 int input = intInput(env, info);
820 int result = TestCondAttrGetClock(input);
821 return intOutput(env, result);
822 }
TestCondAttrGetPShared(int input)823 static int TestCondAttrGetPShared(int input)
824 {
825 int err = DEFAULTVALUE;
826 pthread_condattr_t condAttr;
827 if (input == NORMAL) {
828 err = pthread_condattr_init(&condAttr);
829 if (err != NORMAL) {
830 return CONDATTR_INIT_FAIL;
831 }
832 err = pthread_condattr_getpshared(&condAttr, PARAM_0);
833 }
834 return err;
835 }
PThreadCondAttrGetPShared(napi_env env, napi_callback_info info)836 static napi_value PThreadCondAttrGetPShared(napi_env env, napi_callback_info info)
837 {
838 int input = intInput(env, info);
839 int result = TestCondAttrGetPShared(input);
840 return intOutput(env, result);
841 }
TestCondAttrSetClock(int input)842 static int TestCondAttrSetClock(int input)
843 {
844 int err = DEFAULTVALUE;
845 pthread_condattr_t condAttr;
846 clockid_t clockid = CLOCK_MONOTONIC;
847 if (input == NORMAL) {
848 err = pthread_condattr_init(&condAttr);
849 if (err != NORMAL) {
850 return CONDATTR_INIT_FAIL;
851 }
852 err = pthread_condattr_setclock(&condAttr, clockid);
853 }
854 return err;
855 }
PThreadCondAttrSetClock(napi_env env, napi_callback_info info)856 static napi_value PThreadCondAttrSetClock(napi_env env, napi_callback_info info)
857 {
858 int input = intInput(env, info);
859 int result = TestCondAttrSetClock(input);
860 return intOutput(env, result);
861 }
testCondAttrSetPShared(int input)862 static int testCondAttrSetPShared(int input)
863 {
864 int err = DEFAULTVALUE;
865 pthread_condattr_t condAttr;
866 int shared = TRUE;
867 if (input == NORMAL) {
868 err = pthread_condattr_init(&condAttr);
869 if (err != NORMAL) {
870 return CONDATTR_INIT_FAIL;
871 }
872 err = pthread_condattr_setpshared(&condAttr, shared);
873 }
874 return err;
875 }
PThreadCondAttrSetPShared(napi_env env, napi_callback_info info)876 static napi_value PThreadCondAttrSetPShared(napi_env env, napi_callback_info info)
877 {
878 int input = intInput(env, info);
879 int result = testCondAttrSetPShared(input);
880 return intOutput(env, result);
881 }
ThreadFunc3(void *)882 static void *ThreadFunc3(void *) { return nullptr; }
testCreate(int input)883 static int testCreate(int input)
884 {
885 int err = DEFAULTVALUE;
886 pthread_t pid;
887 if (input == NORMAL) {
888 err = pthread_create(&pid, nullptr, ThreadFunc3, nullptr);
889 }
890 return err;
891 }
PThreadCreate(napi_env env, napi_callback_info info)892 static napi_value PThreadCreate(napi_env env, napi_callback_info info)
893 {
894 int input = intInput(env, info);
895 int result = testCreate(input);
896 return intOutput(env, result);
897 }
testDetach(int input)898 static int testDetach(int input)
899 {
900 int err = DEFAULTVALUE;
901 pthread_t pid = PARAM_0;
902 if (input == NORMAL) {
903 err = pthread_create(&pid, nullptr, ThreadFunc3, nullptr);
904 if (err != NORMAL) {
905 return CREATE_ERROR;
906 }
907 err = pthread_detach(pid);
908 }
909 return err;
910 }
PThreadDetach(napi_env env, napi_callback_info info)911 static napi_value PThreadDetach(napi_env env, napi_callback_info info)
912 {
913 int input = intInput(env, info);
914 int result = testDetach(input);
915 return intOutput(env, result);
916 }
917
testEqual(int input)918 static int testEqual(int input)
919 {
920 int err = DEFAULTVALUE;
921 pthread_t pid = PARAM_0;
922 if (input == NORMAL) {
923 err = pthread_create(&pid, nullptr, ThreadFunc3, nullptr);
924 if (err != NORMAL) {
925 return CREATE_ERROR;
926 }
927 err = pthread_equal(pid, pid);
928 if (err != NORMAL) {
929 return EQUAL_RES;
930 }
931 }
932 return err;
933 }
PThreadEqual(napi_env env, napi_callback_info info)934 static napi_value PThreadEqual(napi_env env, napi_callback_info info)
935 {
936 int input = intInput(env, info);
937 int result = testEqual(input);
938 return intOutput(env, result);
939 }
testEqual2(int input)940 static int testEqual2(int input)
941 {
942 int err = DEFAULTVALUE;
943 pthread_t pidFirst = PARAM_0;
944 pthread_t pidsecond = PARAM_0;
945 if (input == NORMAL) {
946 err = pthread_create(&pidFirst, nullptr, ThreadFunc3, nullptr);
947 if (err != NORMAL) {
948 return CREATE_ERROR;
949 }
950 err = pthread_create(&pidsecond, nullptr, ThreadFunc3, nullptr);
951 if (err != NORMAL) {
952 return CREATE_ERROR;
953 }
954 err = pthread_equal(pidFirst, pidsecond);
955 }
956 return err;
957 }
PThreadEqual2(napi_env env, napi_callback_info info)958 static napi_value PThreadEqual2(napi_env env, napi_callback_info info)
959 {
960 int input = intInput(env, info);
961 int result = testEqual2(input);
962 return intOutput(env, result);
963 }
964 int g_exitOne = PARAM_0;
threadFunc4(void *)965 static void *threadFunc4(void *) { pthread_exit(&g_exitOne); }
testExit(int input)966 static int testExit(int input)
967 {
968 int err = DEFAULTVALUE;
969 pthread_t pidFirst = PARAM_0;
970 void *pThreadResult = nullptr;
971 if (input == NORMAL) {
972 err = pthread_create(&pidFirst, nullptr, threadFunc4, nullptr);
973 if (err != NORMAL) {
974 return CREATE_ERROR;
975 }
976 err = pthread_join(pidFirst, &pThreadResult);
977 }
978 return err;
979 }
PThreadExit(napi_env env, napi_callback_info info)980 static napi_value PThreadExit(napi_env env, napi_callback_info info)
981 {
982 int input = intInput(env, info);
983 int result = testExit(input);
984 return intOutput(env, result);
985 }
testGetAttrNp(int input)986 static int testGetAttrNp(int input)
987 {
988 int err = DEFAULTVALUE;
989 pthread_t pidFirst = PARAM_0;
990 pthread_attr_t pthreadAttr;
991 if (input == NORMAL) {
992 err = pthread_create(&pidFirst, nullptr, ThreadFunc3, nullptr);
993 if (err != NORMAL) {
994 return CREATE_ERROR;
995 }
996 err = pthread_getattr_np(pidFirst, &pthreadAttr);
997 }
998 return err;
999 }
PThreadGetAttrNp(napi_env env, napi_callback_info info)1000 static napi_value PThreadGetAttrNp(napi_env env, napi_callback_info info)
1001 {
1002 int input = intInput(env, info);
1003 int result = testGetAttrNp(input);
1004 return intOutput(env, result);
1005 }
testGetCpuClockId(int input)1006 static int testGetCpuClockId(int input)
1007 {
1008 int err = DEFAULTVALUE;
1009 pthread_t pidFirst = PARAM_0;
1010 clockid_t clockid = PARAM_0;
1011 if (input == NORMAL) {
1012 err = pthread_create(&pidFirst, nullptr, ThreadFunc3, nullptr);
1013 if (err != NORMAL) {
1014 return CREATE_ERROR;
1015 }
1016 err = pthread_getcpuclockid(pidFirst, &clockid);
1017 }
1018 return err;
1019 }
PThreadGetCpuClockId(napi_env env, napi_callback_info info)1020 static napi_value PThreadGetCpuClockId(napi_env env, napi_callback_info info)
1021 {
1022 int input = intInput(env, info);
1023 int result = testGetCpuClockId(input);
1024 return intOutput(env, result);
1025 }
testGetSchedParam(int input)1026 static int testGetSchedParam(int input)
1027 {
1028 int err = DEFAULTVALUE;
1029 pthread_t pidFirst = PARAM_0;
1030 int policy = PARAM_0;
1031 struct sched_param schedParam;
1032 if (input == NORMAL) {
1033 err = pthread_create(&pidFirst, nullptr, ThreadFunc3, nullptr);
1034 if (err != NORMAL) {
1035 return CREATE_ERROR;
1036 }
1037 err = pthread_getschedparam(pidFirst, &policy, &schedParam);
1038 }
1039 return err;
1040 }
PThreadGetSchedParam(napi_env env, napi_callback_info info)1041 static napi_value PThreadGetSchedParam(napi_env env, napi_callback_info info)
1042 {
1043 int input = intInput(env, info);
1044 int result = testGetSchedParam(input);
1045 return intOutput(env, result);
1046 }
1047 static pthread_key_t g_testGetSpecificKey;
1048 int32_t *keyRet = nullptr;
1049 int keyRes = PARAM_0;
threadFuncA(void *)1050 void *threadFuncA(void *)
1051 {
1052 int value = PARAM_0;
1053 pthread_setspecific(g_testGetSpecificKey, &value);
1054 keyRet = static_cast<int *>(pthread_getspecific(g_testGetSpecificKey));
1055 keyRes = *keyRet;
1056 pthread_exit(&keyRes);
1057 }
testGetSpecific(int input)1058 static int testGetSpecific(int input)
1059 {
1060 int err = DEFAULTVALUE;
1061 pthread_t pidFirst;
1062 void *pThreadResult = nullptr;
1063 if (input == NORMAL) {
1064 err = pthread_key_create(&g_testGetSpecificKey, nullptr);
1065 if (err != NORMAL) {
1066 return KEY_CREATE_ERROR;
1067 }
1068 err = pthread_create(&pidFirst, nullptr, threadFuncA, nullptr);
1069 if (err != NORMAL) {
1070 return CREATE_ERROR;
1071 }
1072 pthread_join(pidFirst, &pThreadResult);
1073 }
1074 return *(int32_t *)pThreadResult;
1075 }
PThreadGetSpecific(napi_env env, napi_callback_info info)1076 static napi_value PThreadGetSpecific(napi_env env, napi_callback_info info)
1077 {
1078 int input = intInput(env, info);
1079 int result = testGetSpecific(input);
1080 return intOutput(env, result);
1081 }
TestJoin(int input)1082 static int TestJoin(int input)
1083 {
1084 int err = DEFAULTVALUE;
1085 pthread_t pidFirst = PARAM_0;
1086 if (input == NORMAL) {
1087 err = pthread_create(&pidFirst, nullptr, threadFuncA, nullptr);
1088 if (err != NORMAL) {
1089 return CREATE_ERROR;
1090 }
1091 err = pthread_join(pidFirst, nullptr);
1092 }
1093 return err;
1094 }
PThreadJoin(napi_env env, napi_callback_info info)1095 static napi_value PThreadJoin(napi_env env, napi_callback_info info)
1096 {
1097 int input = intInput(env, info);
1098 int result = TestJoin(input);
1099 return intOutput(env, result);
1100 }
testKeyCreate(int input)1101 static int testKeyCreate(int input)
1102 {
1103 int err = DEFAULTVALUE;
1104 if (input == NORMAL) {
1105 err = pthread_key_create(&g_testGetSpecificKey, nullptr);
1106 }
1107 return err;
1108 }
PThreadKeyCreate(napi_env env, napi_callback_info info)1109 static napi_value PThreadKeyCreate(napi_env env, napi_callback_info info)
1110 {
1111 int input = intInput(env, info);
1112 int result = testKeyCreate(input);
1113 return intOutput(env, result);
1114 }
testKeyDelete(int input)1115 static int testKeyDelete(int input)
1116 {
1117 int err = DEFAULTVALUE;
1118 if (input == NORMAL) {
1119 err = pthread_key_create(&g_testGetSpecificKey, nullptr);
1120 if (err != NORMAL) {
1121 return KEY_CREATE_ERROR;
1122 }
1123 err = pthread_key_delete(g_testGetSpecificKey);
1124 }
1125 return err;
1126 }
PThreadKeyDelete(napi_env env, napi_callback_info info)1127 static napi_value PThreadKeyDelete(napi_env env, napi_callback_info info)
1128 {
1129 int input = intInput(env, info);
1130 int result = testKeyDelete(input);
1131 return intOutput(env, result);
1132 }
threadFunc5(void *)1133 static void *threadFunc5(void *)
1134 {
1135 sleep(SLEEPTIME);
1136 return nullptr;
1137 }
1138
testKill(int input)1139 static int testKill(int input)
1140 {
1141 int err = DEFAULTVALUE;
1142 pthread_t pidFirst;
1143 if (input == NORMAL) {
1144 err = pthread_create(&pidFirst, nullptr, threadFunc5, nullptr);
1145 if (err != NORMAL) {
1146 return CREATE_ERROR;
1147 }
1148 err = pthread_kill(pidFirst, PARAM_0);
1149 }
1150 return err;
1151 }
PThreadKill(napi_env env, napi_callback_info info)1152 static napi_value PThreadKill(napi_env env, napi_callback_info info)
1153 {
1154 int input = intInput(env, info);
1155 int result = testKill(input);
1156 return intOutput(env, result);
1157 }
TestMutexInit(int input)1158 static int TestMutexInit(int input)
1159 {
1160 int err = DEFAULTVALUE;
1161 pthread_mutex_t mutexOne;
1162 pthread_mutexattr_t mutexAttr;
1163 if (input == NORMAL) {
1164 err = pthread_mutex_init(&mutexOne, &mutexAttr);
1165 }
1166 return err;
1167 }
PThreadMutexInit(napi_env env, napi_callback_info info)1168 static napi_value PThreadMutexInit(napi_env env, napi_callback_info info)
1169 {
1170 int input = intInput(env, info);
1171 int result = TestMutexInit(input);
1172 return intOutput(env, result);
1173 }
TestMutexDestroy(int input)1174 static int TestMutexDestroy(int input)
1175 {
1176 int err = DEFAULTVALUE;
1177 pthread_mutex_t mutexOne;
1178 pthread_mutexattr_t mutexAttr;
1179 if (input == NORMAL) {
1180 err = pthread_mutex_init(&mutexOne, &mutexAttr);
1181 }
1182 err = pthread_mutex_destroy(&mutexOne);
1183 return err;
1184 }
PThreadMutexDestroy(napi_env env, napi_callback_info info)1185 static napi_value PThreadMutexDestroy(napi_env env, napi_callback_info info)
1186 {
1187 int input = intInput(env, info);
1188 int result = TestMutexDestroy(input);
1189 return intOutput(env, result);
1190 }
TestMutexLock(int input)1191 static int TestMutexLock(int input)
1192 {
1193 int err = DEFAULTVALUE;
1194 pthread_mutex_t mutexOne;
1195 pthread_mutexattr_t mutexAttr;
1196 if (input == NORMAL) {
1197 err = pthread_mutex_init(&mutexOne, &mutexAttr);
1198 }
1199 err = pthread_mutex_lock(&mutexOne);
1200 return err;
1201 }
PThreadMutexLock(napi_env env, napi_callback_info info)1202 static napi_value PThreadMutexLock(napi_env env, napi_callback_info info)
1203 {
1204 int input = intInput(env, info);
1205 int result = TestMutexLock(input);
1206 return intOutput(env, result);
1207 }
testMutexTimedLock(int input)1208 static int testMutexTimedLock(int input)
1209 {
1210 int err = DEFAULTVALUE;
1211 pthread_mutex_t mutexOne;
1212 pthread_mutexattr_t mutexAttr;
1213 if (input == NORMAL) {
1214 err = pthread_mutex_init(&mutexOne, &mutexAttr);
1215 }
1216 struct timeval now;
1217 struct timespec outTime;
1218 outTime.tv_sec = now.tv_sec + SLEEPTIME;
1219 outTime.tv_nsec = now.tv_usec * thousand;
1220 err = pthread_mutex_timedlock(&mutexOne, &outTime);
1221 return err;
1222 }
PThreadMutexTimedLock(napi_env env, napi_callback_info info)1223 static napi_value PThreadMutexTimedLock(napi_env env, napi_callback_info info)
1224 {
1225 int input = intInput(env, info);
1226 int result = testMutexTimedLock(input);
1227 return intOutput(env, result);
1228 }
TestMutexTryLock(int input)1229 static int TestMutexTryLock(int input)
1230 {
1231 int err = DEFAULTVALUE;
1232 pthread_mutex_t mutexOne;
1233 pthread_mutexattr_t mutexAttr;
1234 if (input == NORMAL) {
1235 err = pthread_mutex_init(&mutexOne, &mutexAttr);
1236 }
1237 err = pthread_mutex_trylock(&mutexOne);
1238 return err;
1239 }
PThreadMutexTryLock(napi_env env, napi_callback_info info)1240 static napi_value PThreadMutexTryLock(napi_env env, napi_callback_info info)
1241 {
1242 int input = intInput(env, info);
1243 int result = TestMutexTryLock(input);
1244 return intOutput(env, result);
1245 }
testMutexUnLock(int input)1246 static int testMutexUnLock(int input)
1247 {
1248 int err = DEFAULTVALUE;
1249 pthread_mutex_t mutexOne;
1250 pthread_mutexattr_t mutexAttr;
1251 if (input == NORMAL) {
1252 err = pthread_mutex_init(&mutexOne, &mutexAttr);
1253 }
1254 err = pthread_mutex_lock(&mutexOne);
1255 if (err != NORMAL) {
1256 return LOCK_FAIL;
1257 }
1258 err = pthread_mutex_unlock(&mutexOne);
1259 return err;
1260 }
PThreadMutexUnLock(napi_env env, napi_callback_info info)1261 static napi_value PThreadMutexUnLock(napi_env env, napi_callback_info info)
1262 {
1263 int input = intInput(env, info);
1264 int result = testMutexUnLock(input);
1265 return intOutput(env, result);
1266 }
TestMutexAttrDestroy(int input)1267 static int TestMutexAttrDestroy(int input)
1268 {
1269 int err = DEFAULTVALUE;
1270 pthread_mutexattr_t mutexAttr;
1271 if (input == NORMAL) {
1272 err = pthread_mutexattr_init(&mutexAttr);
1273 if (err != NORMAL) {
1274 return LOCK_FAIL;
1275 }
1276 }
1277 err = pthread_mutexattr_destroy(&mutexAttr);
1278 return err;
1279 }
PThreadMutexAttrDestroy(napi_env env, napi_callback_info info)1280 static napi_value PThreadMutexAttrDestroy(napi_env env, napi_callback_info info)
1281 {
1282 int input = intInput(env, info);
1283 int result = TestMutexAttrDestroy(input);
1284 return intOutput(env, result);
1285 }
testMutexAttrGetProtocol(int input)1286 static int testMutexAttrGetProtocol(int input)
1287 {
1288 int err = DEFAULTVALUE;
1289 int protocol = PARAM_0;
1290 pthread_mutexattr_t mutexAttr;
1291 if (input == NORMAL) {
1292 err = pthread_mutexattr_init(&mutexAttr);
1293 if (err != NORMAL) {
1294 return LOCK_FAIL;
1295 }
1296 }
1297 err = pthread_mutexattr_getprotocol(&mutexAttr, &protocol);
1298 return err;
1299 }
PThreadMutexAttrGetProtocol(napi_env env, napi_callback_info info)1300 static napi_value PThreadMutexAttrGetProtocol(napi_env env, napi_callback_info info)
1301 {
1302 int input = intInput(env, info);
1303 int result = testMutexAttrGetProtocol(input);
1304 return intOutput(env, result);
1305 }
testMutexAttrGetPshared(int input)1306 static int testMutexAttrGetPshared(int input)
1307 {
1308 int err = DEFAULTVALUE;
1309 int share = PARAM_0;
1310 pthread_mutexattr_t mutexAttr;
1311 if (input == NORMAL) {
1312 err = pthread_mutexattr_init(&mutexAttr);
1313 if (err != NORMAL) {
1314 return LOCK_FAIL;
1315 }
1316 }
1317 err = pthread_mutexattr_getpshared(&mutexAttr, &share);
1318 return err;
1319 }
PThreadMutexAttrGetPShared(napi_env env, napi_callback_info info)1320 static napi_value PThreadMutexAttrGetPShared(napi_env env, napi_callback_info info)
1321 {
1322 int input = intInput(env, info);
1323 int result = testMutexAttrGetPshared(input);
1324 return intOutput(env, result);
1325 }
TestMutexAttrGetType(int input)1326 static int TestMutexAttrGetType(int input)
1327 {
1328 int err = DEFAULTVALUE;
1329 int type = PARAM_0;
1330 pthread_mutexattr_t mutexAttr;
1331 if (input == NORMAL) {
1332 err = pthread_mutexattr_init(&mutexAttr);
1333 if (err != NORMAL) {
1334 return LOCK_FAIL;
1335 }
1336 }
1337 err = pthread_mutexattr_gettype(&mutexAttr, &type);
1338 return err;
1339 }
PThreadMutexAttrGetType(napi_env env, napi_callback_info info)1340 static napi_value PThreadMutexAttrGetType(napi_env env, napi_callback_info info)
1341 {
1342 int input = intInput(env, info);
1343 int result = TestMutexAttrGetType(input);
1344 return intOutput(env, result);
1345 }
TestMutexAttrInit(int input)1346 static int TestMutexAttrInit(int input)
1347 {
1348 int err = DEFAULTVALUE;
1349 pthread_mutexattr_t mutexAttr;
1350 if (input == NORMAL) {
1351 err = pthread_mutexattr_init(&mutexAttr);
1352 }
1353 return err;
1354 }
PThreadMutexAttrInit(napi_env env, napi_callback_info info)1355 static napi_value PThreadMutexAttrInit(napi_env env, napi_callback_info info)
1356 {
1357 int input = intInput(env, info);
1358 int result = TestMutexAttrInit(input);
1359 return intOutput(env, result);
1360 }
testMutexAttrSetProtocol(int input)1361 static int testMutexAttrSetProtocol(int input)
1362 {
1363 int err = DEFAULTVALUE;
1364 int protocol = PARAM_0;
1365 pthread_mutexattr_t mutexAttr;
1366 if (input == NORMAL) {
1367 err = pthread_mutexattr_init(&mutexAttr);
1368 if (err != NORMAL) {
1369 return LOCK_FAIL;
1370 }
1371 }
1372 err = pthread_mutexattr_setprotocol(&mutexAttr, protocol);
1373 return err;
1374 }
PThreadMutexAttrSetProtocol(napi_env env, napi_callback_info info)1375 static napi_value PThreadMutexAttrSetProtocol(napi_env env, napi_callback_info info)
1376 {
1377 int input = intInput(env, info);
1378 int result = testMutexAttrSetProtocol(input);
1379 return intOutput(env, result);
1380 }
testMutexAttrSetPshared(int input)1381 static int testMutexAttrSetPshared(int input)
1382 {
1383 int err = DEFAULTVALUE;
1384 int share = PARAM_0;
1385 pthread_mutexattr_t mutexAttr;
1386 if (input == NORMAL) {
1387 err = pthread_mutexattr_init(&mutexAttr);
1388 if (err != NORMAL) {
1389 return LOCK_FAIL;
1390 }
1391 }
1392 err = pthread_mutexattr_setpshared(&mutexAttr, share);
1393 return err;
1394 }
PThreadMutexAttrSetPShared(napi_env env, napi_callback_info info)1395 static napi_value PThreadMutexAttrSetPShared(napi_env env, napi_callback_info info)
1396 {
1397 int input = intInput(env, info);
1398 int result = testMutexAttrSetPshared(input);
1399 return intOutput(env, result);
1400 }
testMutexAttrSetType(int input)1401 static int testMutexAttrSetType(int input)
1402 {
1403 int err = DEFAULTVALUE;
1404 int type = PARAM_0;
1405 pthread_mutexattr_t mutexAttr;
1406 if (input == NORMAL) {
1407 err = pthread_mutexattr_init(&mutexAttr);
1408 if (err != NORMAL) {
1409 return LOCK_FAIL;
1410 }
1411 }
1412 err = pthread_mutexattr_settype(&mutexAttr, type);
1413 return err;
1414 }
PThreadMutexAttrSetType(napi_env env, napi_callback_info info)1415 static napi_value PThreadMutexAttrSetType(napi_env env, napi_callback_info info)
1416 {
1417 int input = intInput(env, info);
1418 int result = testMutexAttrSetType(input);
1419 return intOutput(env, result);
1420 }
1421 pthread_once_t g_once = PTHREAD_ONCE_INIT;
once_run(void)1422 void once_run(void)
1423 {
1424 int i = PARAM_0;
1425 i = i + 1;
1426 }
1427 int g_pThreadOnceRet = PARAM_0;
threadfunc5(void *)1428 void *threadfunc5(void *)
1429 {
1430 g_pThreadOnceRet = pthread_once(&g_once, once_run);
1431 pthread_exit(&g_pThreadOnceRet);
1432 }
testOnce(int input)1433 static int testOnce(int input)
1434 {
1435 int err = DEFAULTVALUE;
1436 pthread_t pidFirst = PARAM_0;
1437 void *pThreadResult = nullptr;
1438 if (input == NORMAL) {
1439 err = pthread_create(&pidFirst, nullptr, threadfunc5, nullptr);
1440 if (err != NORMAL) {
1441 return CREATE_ERROR;
1442 }
1443 pthread_join(pidFirst, &pThreadResult);
1444 }
1445 return *static_cast<int *>(pThreadResult);
1446 }
PThreadOnce(napi_env env, napi_callback_info info)1447 static napi_value PThreadOnce(napi_env env, napi_callback_info info)
1448 {
1449 int input = intInput(env, info);
1450 int result = testOnce(input);
1451 return intOutput(env, result);
1452 }
testRwLockInit(int input)1453 static int testRwLockInit(int input)
1454 {
1455 int err = DEFAULTVALUE;
1456 pthread_rwlock_t rwLock;
1457 pthread_rwlockattr_t rwLockAttr;
1458 if (input == NORMAL) {
1459 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1460 }
1461 return err;
1462 }
PThreadRwLockInit(napi_env env, napi_callback_info info)1463 static napi_value PThreadRwLockInit(napi_env env, napi_callback_info info)
1464 {
1465 int input = intInput(env, info);
1466 int result = testRwLockInit(input);
1467 return intOutput(env, result);
1468 }
testRwLockDestroy(int input)1469 static int testRwLockDestroy(int input)
1470 {
1471 int err = DEFAULTVALUE;
1472 pthread_rwlock_t rwLock;
1473 pthread_rwlockattr_t rwLockAttr;
1474 if (input == NORMAL) {
1475 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1476 if (err != NORMAL) {
1477 return RWLOCK_INIT_ERROR;
1478 }
1479 err = pthread_rwlock_destroy(&rwLock);
1480 }
1481 return err;
1482 }
PThreadRwLockDestroy(napi_env env, napi_callback_info info)1483 static napi_value PThreadRwLockDestroy(napi_env env, napi_callback_info info)
1484 {
1485 int input = intInput(env, info);
1486 int result = testRwLockDestroy(input);
1487 return intOutput(env, result);
1488 }
testRwLockRdLock(int input)1489 static int testRwLockRdLock(int input)
1490 {
1491 int err = DEFAULTVALUE;
1492 pthread_rwlock_t rwLock;
1493 pthread_rwlockattr_t rwLockAttr;
1494 if (input == NORMAL) {
1495 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1496 if (err != NORMAL) {
1497 return RWLOCK_INIT_ERROR;
1498 }
1499 err = pthread_rwlock_rdlock(&rwLock);
1500 }
1501 return err;
1502 }
PThreadRwLockRdLock(napi_env env, napi_callback_info info)1503 static napi_value PThreadRwLockRdLock(napi_env env, napi_callback_info info)
1504 {
1505 int input = intInput(env, info);
1506 int result = testRwLockRdLock(input);
1507 return intOutput(env, result);
1508 }
testRwLockTimedRdLock(int input)1509 static int testRwLockTimedRdLock(int input)
1510 {
1511 int err = DEFAULTVALUE;
1512 pthread_rwlock_t rwLock;
1513 pthread_rwlockattr_t rwLockAttr;
1514 struct timeval now;
1515 struct timespec outTime;
1516 gettimeofday(&now, nullptr);
1517 outTime.tv_sec = now.tv_sec + SLEEPTIME;
1518 outTime.tv_nsec = now.tv_usec * thousand;
1519 if (input == NORMAL) {
1520 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1521 if (err != NORMAL) {
1522 return RWLOCK_INIT_ERROR;
1523 }
1524 err = pthread_rwlock_timedrdlock(&rwLock, &outTime);
1525 }
1526 return err;
1527 }
PThreadRwLockTimedRdLock(napi_env env, napi_callback_info info)1528 static napi_value PThreadRwLockTimedRdLock(napi_env env, napi_callback_info info)
1529 {
1530 int input = intInput(env, info);
1531 int result = testRwLockTimedRdLock(input);
1532 return intOutput(env, result);
1533 }
testRwLockTimedWrLock(int input)1534 static int testRwLockTimedWrLock(int input)
1535 {
1536 int err = DEFAULTVALUE;
1537 pthread_rwlock_t rwLock;
1538 pthread_rwlockattr_t rwLockAttr;
1539 struct timeval now;
1540 struct timespec outTime;
1541 gettimeofday(&now, nullptr);
1542 outTime.tv_sec = now.tv_sec + SLEEPTIME;
1543 outTime.tv_nsec = now.tv_usec * thousand;
1544 if (input == NORMAL) {
1545 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1546 if (err != NORMAL) {
1547 return RWLOCK_INIT_ERROR;
1548 }
1549 err = pthread_rwlock_timedwrlock(&rwLock, &outTime);
1550 }
1551 return err;
1552 }
PThreadRwLockTimedWrLock(napi_env env, napi_callback_info info)1553 static napi_value PThreadRwLockTimedWrLock(napi_env env, napi_callback_info info)
1554 {
1555 int input = intInput(env, info);
1556 int result = testRwLockTimedWrLock(input);
1557 return intOutput(env, result);
1558 }
testRwLockTryRdLock(int input)1559 static int testRwLockTryRdLock(int input)
1560 {
1561 int err = DEFAULTVALUE;
1562 pthread_rwlock_t rwLock;
1563 pthread_rwlockattr_t rwLockAttr;
1564 if (input == NORMAL) {
1565 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1566 if (err != NORMAL) {
1567 return RWLOCK_INIT_ERROR;
1568 }
1569 err = pthread_rwlock_tryrdlock(&rwLock);
1570 }
1571 return err;
1572 }
PThreadRwLockTryRdLock(napi_env env, napi_callback_info info)1573 static napi_value PThreadRwLockTryRdLock(napi_env env, napi_callback_info info)
1574 {
1575 int input = intInput(env, info);
1576 int result = testRwLockTryRdLock(input);
1577 return intOutput(env, result);
1578 }
testRwLockTryWrLock(int input)1579 static int testRwLockTryWrLock(int input)
1580 {
1581 int err = DEFAULTVALUE;
1582 pthread_rwlock_t rwLock;
1583 pthread_rwlockattr_t rwLockAttr;
1584 if (input == NORMAL) {
1585 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1586 if (err != NORMAL) {
1587 return RWLOCK_INIT_ERROR;
1588 }
1589 err = pthread_rwlock_trywrlock(&rwLock);
1590 }
1591 return err;
1592 }
PThreadRwLockTryWrLock(napi_env env, napi_callback_info info)1593 static napi_value PThreadRwLockTryWrLock(napi_env env, napi_callback_info info)
1594 {
1595 int input = intInput(env, info);
1596 int result = testRwLockTryWrLock(input);
1597 return intOutput(env, result);
1598 }
TestRwLockUnLock(int input)1599 static int TestRwLockUnLock(int input)
1600 {
1601 int err = DEFAULTVALUE;
1602 pthread_rwlock_t rwLock;
1603 pthread_rwlockattr_t rwLockAttr;
1604 if (input == NORMAL) {
1605 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1606 if (err != NORMAL) {
1607 return RWLOCK_INIT_ERROR;
1608 }
1609 err = pthread_rwlock_rdlock(&rwLock);
1610 if (err != NORMAL) {
1611 return RWLOCK_RDLOCK_ERROR;
1612 }
1613 err = pthread_rwlock_unlock(&rwLock);
1614 }
1615 return err;
1616 }
PThreadRwLockUnLock(napi_env env, napi_callback_info info)1617 static napi_value PThreadRwLockUnLock(napi_env env, napi_callback_info info)
1618 {
1619 int input = intInput(env, info);
1620 int result = TestRwLockUnLock(input);
1621 return intOutput(env, result);
1622 }
testRwLockWrLock(int input)1623 static int testRwLockWrLock(int input)
1624 {
1625 int err = DEFAULTVALUE;
1626 pthread_rwlock_t rwLock;
1627 pthread_rwlockattr_t rwLockAttr;
1628 if (input == NORMAL) {
1629 err = pthread_rwlock_init(&rwLock, &rwLockAttr);
1630 if (err != NORMAL) {
1631 return RWLOCK_INIT_ERROR;
1632 }
1633 err = pthread_rwlock_wrlock(&rwLock);
1634 }
1635 return err;
1636 }
PThreadRwLockWrLock(napi_env env, napi_callback_info info)1637 static napi_value PThreadRwLockWrLock(napi_env env, napi_callback_info info)
1638 {
1639 int input = intInput(env, info);
1640 int result = testRwLockWrLock(input);
1641 return intOutput(env, result);
1642 }
TestRwLockAttrDestroy(int input)1643 static int TestRwLockAttrDestroy(int input)
1644 {
1645 int err = DEFAULTVALUE;
1646 pthread_rwlockattr_t rwLockAttr;
1647 if (input == NORMAL) {
1648 err = pthread_rwlockattr_init(&rwLockAttr);
1649 if (err != NORMAL) {
1650 return RWLOCKATTR_INIT_ERROR;
1651 }
1652 err = pthread_rwlockattr_destroy(&rwLockAttr);
1653 }
1654 return err;
1655 }
PThreadRwLockAttrDestroy(napi_env env, napi_callback_info info)1656 static napi_value PThreadRwLockAttrDestroy(napi_env env, napi_callback_info info)
1657 {
1658 int input = intInput(env, info);
1659 int result = TestRwLockAttrDestroy(input);
1660 return intOutput(env, result);
1661 }
testRwLockAttrGetPShared(int input)1662 static int testRwLockAttrGetPShared(int input)
1663 {
1664 int err = DEFAULTVALUE;
1665 pthread_rwlockattr_t rwLockAttr;
1666 int shared;
1667 if (input == NORMAL) {
1668 err = pthread_rwlockattr_init(&rwLockAttr);
1669 if (err != NORMAL) {
1670 return RWLOCKATTR_INIT_ERROR;
1671 }
1672 err = pthread_rwlockattr_getpshared(&rwLockAttr, &shared);
1673 }
1674 return err;
1675 }
PThreadRwLockAttrGetPShared(napi_env env, napi_callback_info info)1676 static napi_value PThreadRwLockAttrGetPShared(napi_env env, napi_callback_info info)
1677 {
1678 int input = intInput(env, info);
1679 int result = testRwLockAttrGetPShared(input);
1680 return intOutput(env, result);
1681 }
testRwLockAttrInit(int input)1682 static int testRwLockAttrInit(int input)
1683 {
1684 int err = DEFAULTVALUE;
1685 pthread_rwlockattr_t rwLockAttr;
1686 if (input == NORMAL) {
1687 err = pthread_rwlockattr_init(&rwLockAttr);
1688 }
1689 return err;
1690 }
PThreadRwLockAttrInit(napi_env env, napi_callback_info info)1691 static napi_value PThreadRwLockAttrInit(napi_env env, napi_callback_info info)
1692 {
1693 int input = intInput(env, info);
1694 int result = testRwLockAttrInit(input);
1695 return intOutput(env, result);
1696 }
TestRwLockAttrSetPShared(int input)1697 static int TestRwLockAttrSetPShared(int input)
1698 {
1699 int err = DEFAULTVALUE;
1700 pthread_rwlockattr_t rwLockAttr;
1701 int shared = PARAM_0;
1702 if (input == NORMAL) {
1703 err = pthread_rwlockattr_init(&rwLockAttr);
1704 if (err != NORMAL) {
1705 return RWLOCKATTR_INIT_ERROR;
1706 }
1707 err = pthread_rwlockattr_setpshared(&rwLockAttr, shared);
1708 }
1709 return err;
1710 }
PThreadRwLockAttrSetPShared(napi_env env, napi_callback_info info)1711 static napi_value PThreadRwLockAttrSetPShared(napi_env env, napi_callback_info info)
1712 {
1713 int input = intInput(env, info);
1714 int result = TestRwLockAttrSetPShared(input);
1715 return intOutput(env, result);
1716 }
TestSelf(int input)1717 static int TestSelf(int input)
1718 {
1719 int err = DEFAULTVALUE;
1720 if (input == NORMAL) {
1721 pthread_t pid = pthread_self();
1722 if (pid > NORMAL) {
1723 err = NORMAL;
1724 } else {
1725 err = ERROR;
1726 }
1727 }
1728 return err;
1729 }
PThreadSelf(napi_env env, napi_callback_info info)1730 static napi_value PThreadSelf(napi_env env, napi_callback_info info)
1731 {
1732 int input = intInput(env, info);
1733 int result = TestSelf(input);
1734 return intOutput(env, result);
1735 }
testSetNameNp(int input)1736 static int testSetNameNp(int input)
1737 {
1738 int err = DEFAULTVALUE;
1739 pthread_t pidFirst = PARAM_0;
1740 char setName[16] = "pSet";
1741 if (input == NORMAL) {
1742 err = pthread_create(&pidFirst, nullptr, ThreadFunc3, nullptr);
1743 if (err != NORMAL) {
1744 return CREATE_ERROR;
1745 }
1746 err = pthread_setname_np(pidFirst, setName);
1747 }
1748 return err;
1749 }
PThreadSetNameNp(napi_env env, napi_callback_info info)1750 static napi_value PThreadSetNameNp(napi_env env, napi_callback_info info)
1751 {
1752 int input = intInput(env, info);
1753 int result = testSetNameNp(input);
1754 return intOutput(env, result);
1755 }
testSetSchedParam(int input)1756 static int testSetSchedParam(int input)
1757 {
1758 int err = DEFAULTVALUE;
1759 pthread_t pidFirst = PARAM_0;
1760 struct sched_param schedParam;
1761 schedParam.sched_priority = PARAM_0;
1762
1763 if (input == NORMAL) {
1764 err = pthread_create(&pidFirst, nullptr, ThreadFunc3, nullptr);
1765 if (err != NORMAL) {
1766 return CREATE_ERROR;
1767 }
1768 err = pthread_setschedparam(pidFirst, SCHED_OTHER, &schedParam);
1769 }
1770 return err;
1771 }
PThreadSetSchedParam(napi_env env, napi_callback_info info)1772 static napi_value PThreadSetSchedParam(napi_env env, napi_callback_info info)
1773 {
1774 int input = intInput(env, info);
1775 int result = testSetSchedParam(input);
1776 return intOutput(env, result);
1777 }
testSetSchedPrio(int input)1778 static int testSetSchedPrio(int input)
1779 {
1780 int err = DEFAULTVALUE;
1781 pthread_t pidFirst = PARAM_0;
1782 int prio = PARAM_0;
1783 if (input == NORMAL) {
1784 err = pthread_create(&pidFirst, nullptr, ThreadFunc3, nullptr);
1785 if (err != NORMAL) {
1786 return CREATE_ERROR;
1787 }
1788 err = pthread_setschedprio(pidFirst, prio);
1789 }
1790 return err;
1791 }
PThreadSetSchedPrio(napi_env env, napi_callback_info info)1792 static napi_value PThreadSetSchedPrio(napi_env env, napi_callback_info info)
1793 {
1794 int input = intInput(env, info);
1795 int result = testSetSchedPrio(input);
1796 return intOutput(env, result);
1797 }
1798 static pthread_key_t testSetSpecificKey;
1799 int setSpecRet = DEFAULTVALUE;
threadfuncB(void *)1800 void *threadfuncB(void *)
1801 {
1802 int32_t value = PARAM_0;
1803 setSpecRet = pthread_setspecific(testSetSpecificKey, &value);
1804 pthread_exit(&setSpecRet);
1805 }
testSetSpecific(int input)1806 static int testSetSpecific(int input)
1807 {
1808 int err = DEFAULTVALUE;
1809 pthread_t pidFirst = PARAM_0;
1810 void *pThreadResult = nullptr;
1811 if (input == NORMAL) {
1812 err = pthread_key_create(&testSetSpecificKey, nullptr);
1813 if (err != NORMAL) {
1814 return KEY_CREATE_ERROR;
1815 }
1816 err = pthread_create(&pidFirst, nullptr, threadfuncB, nullptr);
1817 if (err != NORMAL) {
1818 return CREATE_ERROR;
1819 }
1820 pthread_join(pidFirst, &pThreadResult);
1821 pthread_key_delete(testSetSpecificKey);
1822 }
1823 return *static_cast<int *>(pThreadResult);
1824 }
PThreadSetSpecific(napi_env env, napi_callback_info info)1825 static napi_value PThreadSetSpecific(napi_env env, napi_callback_info info)
1826 {
1827 int input = intInput(env, info);
1828 int result = testSetSpecific(input);
1829 return intOutput(env, result);
1830 }
PthreadSigmask(napi_env env, napi_callback_info info)1831 static napi_value PthreadSigmask(napi_env env, napi_callback_info info)
1832 {
1833 napi_value result = nullptr;
1834 sigset_t set;
1835 sigaddset(&set, SIGINT);
1836 int32_t returnValue = pthread_sigmask(SIG_BLOCK, &set, nullptr);
1837 napi_create_int32(env, returnValue, &result);
1838 return result;
1839 }
1840
PthreadSpinInit(napi_env env, napi_callback_info info)1841 static napi_value PthreadSpinInit(napi_env env, napi_callback_info info)
1842 {
1843 napi_value result = nullptr;
1844 pthread_spinlock_t spin;
1845 int param = PTHREAD_PROCESS_PRIVATE;
1846 int returnValue = pthread_spin_init(&spin, param);
1847 pthread_spin_destroy(&spin);
1848 napi_create_int32(env, returnValue, &result);
1849 return result;
1850 }
1851
PthreadSpinDestroy(napi_env env, napi_callback_info info)1852 static napi_value PthreadSpinDestroy(napi_env env, napi_callback_info info)
1853 {
1854 napi_value result = nullptr;
1855 pthread_spinlock_t spinlock;
1856 int param = PTHREAD_PROCESS_PRIVATE;
1857 pthread_spin_init(&spinlock, param);
1858 int returnValue = pthread_spin_destroy(&spinlock);
1859 napi_create_int32(env, returnValue, &result);
1860 return result;
1861 }
1862
PthreadSpinLock(napi_env env, napi_callback_info info)1863 static napi_value PthreadSpinLock(napi_env env, napi_callback_info info)
1864 {
1865 napi_value result = nullptr;
1866 pthread_spinlock_t spinlock;
1867 int param = PTHREAD_PROCESS_PRIVATE;
1868 pthread_spin_init(&spinlock, param);
1869 int returnValue = pthread_spin_lock(&spinlock);
1870 pthread_spin_unlock(&spinlock);
1871
1872 napi_create_int32(env, returnValue, &result);
1873 return result;
1874 }
1875
PthreadSpinTrylock(napi_env env, napi_callback_info info)1876 static napi_value PthreadSpinTrylock(napi_env env, napi_callback_info info)
1877 {
1878 napi_value result = nullptr;
1879 pthread_spinlock_t spinlock;
1880 int param = PTHREAD_PROCESS_PRIVATE;
1881 pthread_spin_init(&spinlock, param);
1882 int returnValue = pthread_spin_trylock(&spinlock);
1883 napi_create_int32(env, returnValue, &result);
1884 return result;
1885 }
1886
PthreadSpinUnlock(napi_env env, napi_callback_info info)1887 static napi_value PthreadSpinUnlock(napi_env env, napi_callback_info info)
1888 {
1889 napi_value result = nullptr;
1890 pthread_spinlock_t spinlock;
1891 int param = PTHREAD_PROCESS_PRIVATE;
1892 pthread_spin_init(&spinlock, param);
1893 pthread_spin_lock(&spinlock);
1894 int returnValue = pthread_spin_unlock(&spinlock);
1895 napi_create_int32(env, returnValue, &result);
1896 return result;
1897 }
1898 EXTERN_C_START
Init(napi_env env, napi_value exports)1899 static napi_value Init(napi_env env, napi_value exports)
1900 {
1901 napi_property_descriptor desc[] = {
1902 {"pThreadAtFork", nullptr, PThreadAtFork, nullptr, nullptr, nullptr, napi_default, nullptr},
1903 {"pThreadAttrDestory", nullptr, PThreadAttrDestory, nullptr, nullptr, nullptr, napi_default, nullptr},
1904 {"pThreadAttrGetDetachState", nullptr, PThreadAttrGetDetachState, nullptr, nullptr, nullptr, napi_default,
1905 nullptr},
1906 {"pThreadAttrGetGuardSize", nullptr, PThreadAttrGetGuardSize, nullptr, nullptr, nullptr, napi_default, nullptr},
1907 {"pThreadAttrGetInheritSched", nullptr, PThreadAttrGetInheritSched, nullptr, nullptr, nullptr, napi_default,
1908 nullptr},
1909 {"pThreadAttrGetSchedParam", nullptr, PThreadAttrGetSchedParam, nullptr, nullptr, nullptr, napi_default,
1910 nullptr},
1911 {"pThreadAttrGetSchedPolicy", nullptr, PThreadAttrGetSchedPolicy, nullptr, nullptr, nullptr, napi_default,
1912 nullptr},
1913 {"pThreadAttrGetScope", nullptr, PThreadAttrGetScope, nullptr, nullptr, nullptr, napi_default, nullptr},
1914 {"pThreadAttrGetStack", nullptr, PThreadAttrGetStack, nullptr, nullptr, nullptr, napi_default, nullptr},
1915 {"pThreadAttrGetStackSize", nullptr, PThreadAttrGetStackSize, nullptr, nullptr, nullptr, napi_default, nullptr},
1916 {"pThreadAttrInit", nullptr, PThreadAttrInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1917 {"pThreadAttrSetDetachState", nullptr, PThreadAttrSetDetachState, nullptr, nullptr, nullptr, napi_default,
1918 nullptr},
1919 {"pThreadAttrSetGuardSize", nullptr, PThreadAttrSetGuardSize, nullptr, nullptr, nullptr, napi_default, nullptr},
1920 {"pThreadAttrSetInheritSched", nullptr, PThreadAttrSetInheritSched, nullptr, nullptr, nullptr, napi_default,
1921 nullptr},
1922 {"pThreadAttrSetSchedParam", nullptr, PThreadAttrSetSchedParam, nullptr, nullptr, nullptr, napi_default,
1923 nullptr},
1924 {"pThreadAttrSetSchedPolicy", nullptr, PThreadAttrSetSchedPolicy, nullptr, nullptr, nullptr, napi_default,
1925 nullptr},
1926 {"pThreadAttrSetScope", nullptr, PThreadAttrSetScope, nullptr, nullptr, nullptr, napi_default, nullptr},
1927 {"pThreadAttrSetStack", nullptr, PThreadAttrSetStack, nullptr, nullptr, nullptr, napi_default, nullptr},
1928 {"pThreadAttrSetStackSize", nullptr, PThreadAttrSetStackSize, nullptr, nullptr, nullptr, napi_default, nullptr},
1929 {"pThreadBarrierInit", nullptr, PThreadBarrierInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1930 {"pThreadBarrierDestroy", nullptr, PThreadBarrierDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
1931 {"pThreadBarrierWait", nullptr, PThreadBarrierWait, nullptr, nullptr, nullptr, napi_default, nullptr},
1932 {"pThreadBarrierAttrInit", nullptr, PThreadBarrierAttrInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1933 {"pThreadBarrierAttrGetPShared", nullptr, PThreadBarrierAttrGetPShared, nullptr, nullptr, nullptr, napi_default,
1934 nullptr},
1935 {"pThreadBarrierAttrDestroy", nullptr, PThreadBarrierAttrDestroy, nullptr, nullptr, nullptr, napi_default,
1936 nullptr},
1937 {"pThreadBarrierAttrSetPShared", nullptr, PThreadBarrierAttrSetPShared, nullptr, nullptr, nullptr, napi_default,
1938 nullptr},
1939 {"pThreadCondInit", nullptr, PThreadCondInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1940 {"pThreadCondDestroy", nullptr, PThreadCondDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
1941 {"pThreadCondBroadcast", nullptr, PThreadCondBroadcast, nullptr, nullptr, nullptr, napi_default, nullptr},
1942 {"pThreadCondSignal", nullptr, PThreadCondSignal, nullptr, nullptr, nullptr, napi_default, nullptr},
1943 {"pThreadCondWait", nullptr, PThreadCondWait, nullptr, nullptr, nullptr, napi_default, nullptr},
1944 {"pThreadCondTimedWait", nullptr, PThreadCondTimedWait, nullptr, nullptr, nullptr, napi_default, nullptr},
1945 {"pThreadCondAttrInit", nullptr, PThreadCondAttrInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1946 {"pThreadCondAttrDestroy", nullptr, PThreadCondAttrDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
1947 {"pThreadCondAttrGetClock", nullptr, PThreadCondAttrGetClock, nullptr, nullptr, nullptr, napi_default, nullptr},
1948 {"pThreadCondAttrGetPShared", nullptr, PThreadCondAttrGetPShared, nullptr, nullptr, nullptr, napi_default,
1949 nullptr},
1950 {"pThreadCondAttrSetClock", nullptr, PThreadCondAttrSetClock, nullptr, nullptr, nullptr, napi_default, nullptr},
1951 {"pThreadCondAttrSetPShared", nullptr, PThreadCondAttrSetPShared, nullptr, nullptr, nullptr, napi_default,
1952 nullptr},
1953 {"pThreadCreate", nullptr, PThreadCreate, nullptr, nullptr, nullptr, napi_default, nullptr},
1954 {"pThreadDetach", nullptr, PThreadDetach, nullptr, nullptr, nullptr, napi_default, nullptr},
1955 {"pThreadEqual", nullptr, PThreadEqual, nullptr, nullptr, nullptr, napi_default, nullptr},
1956 {"pThreadEqual2", nullptr, PThreadEqual2, nullptr, nullptr, nullptr, napi_default, nullptr},
1957 {"pThreadExit", nullptr, PThreadExit, nullptr, nullptr, nullptr, napi_default, nullptr},
1958 {"pThreadGetAttrNp", nullptr, PThreadGetAttrNp, nullptr, nullptr, nullptr, napi_default, nullptr},
1959 {"pThreadGetCpuClockId", nullptr, PThreadGetCpuClockId, nullptr, nullptr, nullptr, napi_default, nullptr},
1960 {"pThreadGetSchedParam", nullptr, PThreadGetSchedParam, nullptr, nullptr, nullptr, napi_default, nullptr},
1961 {"pThreadGetSpecific", nullptr, PThreadGetSpecific, nullptr, nullptr, nullptr, napi_default, nullptr},
1962 {"pThreadJoin", nullptr, PThreadJoin, nullptr, nullptr, nullptr, napi_default, nullptr},
1963 {"pThreadKeyCreate", nullptr, PThreadKeyCreate, nullptr, nullptr, nullptr, napi_default, nullptr},
1964 {"pThreadKeyDelete", nullptr, PThreadKeyDelete, nullptr, nullptr, nullptr, napi_default, nullptr},
1965 {"pThreadKill", nullptr, PThreadKill, nullptr, nullptr, nullptr, napi_default, nullptr},
1966 {"pThreadMutexInit", nullptr, PThreadMutexInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1967 {"pThreadMutexDestroy", nullptr, PThreadMutexDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
1968 {"pThreadMutexLock", nullptr, PThreadMutexLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1969 {"pThreadMutexTimedLock", nullptr, PThreadMutexTimedLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1970 {"pThreadMutexTryLock", nullptr, PThreadMutexTryLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1971 {"pThreadMutexUnLock", nullptr, PThreadMutexUnLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1972 {"pThreadMutexAttrDestroy", nullptr, PThreadMutexAttrDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
1973 {"pThreadMutexAttrGetProtocol", nullptr, PThreadMutexAttrGetProtocol, nullptr, nullptr, nullptr, napi_default,
1974 nullptr},
1975 {"pThreadMutexAttrGetPShared", nullptr, PThreadMutexAttrGetPShared, nullptr, nullptr, nullptr, napi_default,
1976 nullptr},
1977 {"pThreadMutexAttrGetType", nullptr, PThreadMutexAttrGetType, nullptr, nullptr, nullptr, napi_default, nullptr},
1978 {"pThreadMutexAttrInit", nullptr, PThreadMutexAttrInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1979 {"pThreadMutexAttrSetProtocol", nullptr, PThreadMutexAttrSetProtocol, nullptr, nullptr, nullptr, napi_default,
1980 nullptr},
1981 {"pThreadMutexAttrSetPShared", nullptr, PThreadMutexAttrSetPShared, nullptr, nullptr, nullptr, napi_default,
1982 nullptr},
1983 {"pThreadMutexAttrSetType", nullptr, PThreadMutexAttrSetType, nullptr, nullptr, nullptr, napi_default, nullptr},
1984 {"pThreadOnce", nullptr, PThreadOnce, nullptr, nullptr, nullptr, napi_default, nullptr},
1985 {"pThreadRwLockInit", nullptr, PThreadRwLockInit, nullptr, nullptr, nullptr, napi_default, nullptr},
1986 {"pThreadRwLockDestroy", nullptr, PThreadRwLockDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
1987 {"pThreadRwLockRdLock", nullptr, PThreadRwLockRdLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1988 {"pThreadRwLockTimedRdLock", nullptr, PThreadRwLockTimedRdLock, nullptr, nullptr, nullptr, napi_default,
1989 nullptr},
1990 {"pThreadRwLockTimedWrLock", nullptr, PThreadRwLockTimedWrLock, nullptr, nullptr, nullptr, napi_default,
1991 nullptr},
1992 {"pThreadRwLockTryRdLock", nullptr, PThreadRwLockTryRdLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1993 {"pThreadRwLockTryWrLock", nullptr, PThreadRwLockTryWrLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1994 {"pThreadRwLockUnLock", nullptr, PThreadRwLockUnLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1995 {"pThreadRwLockWrLock", nullptr, PThreadRwLockWrLock, nullptr, nullptr, nullptr, napi_default, nullptr},
1996 {"pThreadRwLockAttrDestroy", nullptr, PThreadRwLockAttrDestroy, nullptr, nullptr, nullptr, napi_default,
1997 nullptr},
1998 {"pThreadRwLockAttrGetPShared", nullptr, PThreadRwLockAttrGetPShared, nullptr, nullptr, nullptr, napi_default,
1999 nullptr},
2000 {"pThreadRwLockAttrInit", nullptr, PThreadRwLockAttrInit, nullptr, nullptr, nullptr, napi_default, nullptr},
2001 {"pThreadRwLockAttrSetPShared", nullptr, PThreadRwLockAttrSetPShared, nullptr, nullptr, nullptr, napi_default,
2002 nullptr},
2003 {"pThreadSelf", nullptr, PThreadSelf, nullptr, nullptr, nullptr, napi_default, nullptr},
2004 {"pThreadSetNameNp", nullptr, PThreadSetNameNp, nullptr, nullptr, nullptr, napi_default, nullptr},
2005 {"pThreadSetSchedParam", nullptr, PThreadSetSchedParam, nullptr, nullptr, nullptr, napi_default, nullptr},
2006 {"pThreadSetSchedPrio", nullptr, PThreadSetSchedPrio, nullptr, nullptr, nullptr, napi_default, nullptr},
2007 {"pThreadSetSpecific", nullptr, PThreadSetSpecific, nullptr, nullptr, nullptr, napi_default, nullptr},
2008 {"pThreadSpinInit", nullptr, PthreadSpinInit, nullptr, nullptr, nullptr, napi_default, nullptr},
2009 {"pThreadSigmask", nullptr, PthreadSigmask, nullptr, nullptr, nullptr, napi_default, nullptr},
2010 {"pThreadSpinDestroy", nullptr, PthreadSpinDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
2011 {"pThreadSpinLock", nullptr, PthreadSpinLock, nullptr, nullptr, nullptr, napi_default, nullptr},
2012 {"pThreadSpinTrylock", nullptr, PthreadSpinTrylock, nullptr, nullptr, nullptr, napi_default, nullptr},
2013 {"pThreadSpinUnlock", nullptr, PthreadSpinUnlock, nullptr, nullptr, nullptr, napi_default, nullptr},
2014
2015 };
2016 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
2017 return exports;
2018 }
2019 EXTERN_C_END
2020
2021 static napi_module demoModule = {
2022 .nm_version = 1,
2023 .nm_flags = 0,
2024 .nm_filename = nullptr,
2025 .nm_register_func = Init,
2026 .nm_modname = "pthread1",
2027 .nm_priv = ((void *)0),
2028 .reserved = {0},
2029 };
2030
RegisterEntryModule(void)2031 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
2032