@@ -479,10 +479,38 @@ INTERCEPTOR(int, pthread_create, void *th, void *attr,
479
479
return res;
480
480
}
481
481
482
- INTERCEPTOR (int , pthread_join, void *t , void **arg ) {
483
- return REAL (pthread_join)(t, arg );
482
+ INTERCEPTOR (int , pthread_join, void *thread , void **retval ) {
483
+ return REAL (pthread_join)(thread, retval );
484
484
}
485
485
486
+ INTERCEPTOR (int , pthread_detach, void *thread) {
487
+ return REAL (pthread_detach)(thread);
488
+ }
489
+
490
+ INTERCEPTOR (int , pthread_exit, void *retval) {
491
+ return REAL (pthread_exit)(retval);
492
+ }
493
+
494
+ # if SANITIZER_INTERCEPT_TRYJOIN
495
+ INTERCEPTOR (int , pthread_tryjoin_np, void *thread, void **ret) {
496
+ return REAL (pthread_tryjoin_np)(thread, ret);
497
+ }
498
+ # define LSAN_MAYBE_INTERCEPT_TRYJOIN INTERCEPT_FUNCTION (pthread_tryjoin_np)
499
+ # else
500
+ # define LSAN_MAYBE_INTERCEPT_TRYJOIN
501
+ # endif // SANITIZER_INTERCEPT_TRYJOIN
502
+
503
+ # if SANITIZER_INTERCEPT_TIMEDJOIN
504
+ INTERCEPTOR (int , pthread_timedjoin_np, void *thread, void **ret,
505
+ const struct timespec *abstime) {
506
+ return REAL (pthread_timedjoin_np)(thread, ret, abstime);
507
+ }
508
+ # define LSAN_MAYBE_INTERCEPT_TIMEDJOIN \
509
+ INTERCEPT_FUNCTION (pthread_timedjoin_np)
510
+ # else
511
+ # define LSAN_MAYBE_INTERCEPT_TIMEDJOIN
512
+ # endif // SANITIZER_INTERCEPT_TIMEDJOIN
513
+
486
514
DEFINE_REAL_PTHREAD_FUNCTIONS
487
515
488
516
INTERCEPTOR (void , _exit, int status) {
@@ -518,6 +546,10 @@ void InitializeInterceptors() {
518
546
LSAN_MAYBE_INTERCEPT_MALLOPT;
519
547
INTERCEPT_FUNCTION (pthread_create);
520
548
INTERCEPT_FUNCTION (pthread_join);
549
+ INTERCEPT_FUNCTION (pthread_detach);
550
+ INTERCEPT_FUNCTION (pthread_exit);
551
+ LSAN_MAYBE_INTERCEPT_TIMEDJOIN;
552
+ LSAN_MAYBE_INTERCEPT_TRYJOIN;
521
553
INTERCEPT_FUNCTION (_exit);
522
554
523
555
LSAN_MAYBE_INTERCEPT__LWP_EXIT;
0 commit comments