1*b5d99089Sbluhm# $OpenBSD: Makefile,v 1.2 2020/12/17 00:51:12 bluhm Exp $ 26bcfccdaSmpi 36bcfccdaSmpiPROG = sigpthread 46bcfccdaSmpiWARNINGS = yes 56bcfccdaSmpiLDADD = -lpthread 66bcfccdaSmpiDPADD = ${LIBPTHREAD} 76bcfccdaSmpiCLEANFILES += out 86bcfccdaSmpi 96bcfccdaSmpi# first test signal delivery while they are blocked 106bcfccdaSmpi 116bcfccdaSmpi.for t in 0 1 2 126bcfccdaSmpi 136bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-unblock-$t 146bcfccdaSmpirun-block-thread-3-unblock-$t: 156bcfccdaSmpi # block signal 166bcfccdaSmpi # run 3 threads 176bcfccdaSmpi # kill process 186bcfccdaSmpi # suspend threads until signaled 196bcfccdaSmpi # unblock thread $t 206bcfccdaSmpi # handle signal 216bcfccdaSmpi ./sigpthread -b -t 3 -u $t >out 226bcfccdaSmpi grep 'signal $t' out 236bcfccdaSmpi test `wc -l <out` = 1 246bcfccdaSmpi 256bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-main-unblock-$t 266bcfccdaSmpirun-block-thread-3-sleep-main-unblock-$t: 276bcfccdaSmpi # block signal 286bcfccdaSmpi # run 3 threads 296bcfccdaSmpi # suspend threads until signaled 306bcfccdaSmpi # sleep in main thread, signal should be received while suspended 316bcfccdaSmpi # kill process 326bcfccdaSmpi # unblock thread $t 336bcfccdaSmpi # handle signal 346bcfccdaSmpi ./sigpthread -b -s -t 3 -u $t >out 356bcfccdaSmpi grep 'signal $t' out 366bcfccdaSmpi test `wc -l <out` = 1 376bcfccdaSmpi 386bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-unblock-$t-sleep-thread 396bcfccdaSmpirun-block-thread-3-sleep-thread-unblock-$t: 406bcfccdaSmpi # block signal 416bcfccdaSmpi # run 3 threads 426bcfccdaSmpi # kill process 436bcfccdaSmpi # sleep in threads, signal should be pending when suspending 446bcfccdaSmpi # suspend threads until signaled 456bcfccdaSmpi # unblock thread $t 466bcfccdaSmpi # handle signal 476bcfccdaSmpi ./sigpthread -b -S -t 3 -u $t >out 486bcfccdaSmpi grep 'signal $t' out 496bcfccdaSmpi test `wc -l <out` = 1 506bcfccdaSmpi 516bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-unblock-unblock-$t 526bcfccdaSmpirun-block-thread-3-sleep-unblock-unblock-$t: 536bcfccdaSmpi # block signal 546bcfccdaSmpi # run 3 threads 556bcfccdaSmpi # kill process 566bcfccdaSmpi # suspend threads until signaled 576bcfccdaSmpi # sleep in thread $t, others should be exited when unblocking 586bcfccdaSmpi # unblock thread $t 596bcfccdaSmpi # handle signal 606bcfccdaSmpi ./sigpthread -b -t 3 -U -u $t >out 616bcfccdaSmpi grep 'signal $t' out 626bcfccdaSmpi test `wc -l <out` = 1 636bcfccdaSmpi 646bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t-unblock-$t 656bcfccdaSmpirun-block-thread-3-kill-$t-unblock-$t: 666bcfccdaSmpi # block signal 676bcfccdaSmpi # run 3 threads 686bcfccdaSmpi # kill thread $t 696bcfccdaSmpi # suspend threads until signaled 706bcfccdaSmpi # unblock thread $t 716bcfccdaSmpi # handle signal 726bcfccdaSmpi ./sigpthread -b -k $t -t 3 -u $t >out 736bcfccdaSmpi grep 'signal $t' out 746bcfccdaSmpi test `wc -l <out` = 1 756bcfccdaSmpi 766bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-main-kill-$t-unblock-$t 776bcfccdaSmpirun-block-thread-3-sleep-main-kill-$t-unblock-$t: 786bcfccdaSmpi # block signal 796bcfccdaSmpi # run 3 threads 806bcfccdaSmpi # suspend threads until signaled 816bcfccdaSmpi # sleep in main thread, signal should be received while suspended 826bcfccdaSmpi # kill thread $t 836bcfccdaSmpi # unblock thread $t 846bcfccdaSmpi # handle signal 856bcfccdaSmpi ./sigpthread -b -k $t -s -t 3 -u $t >out 866bcfccdaSmpi grep 'signal $t' out 876bcfccdaSmpi test `wc -l <out` = 1 886bcfccdaSmpi 896bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t-sleep-thread-unblock-$t 906bcfccdaSmpirun-block-thread-3-kill-$t-sleep-thread-unblock-$t: 916bcfccdaSmpi # block signal 926bcfccdaSmpi # run 3 threads 936bcfccdaSmpi # kill thread $t 946bcfccdaSmpi # sleep in threads, signal should be pending when suspending 956bcfccdaSmpi # suspend threads until signaled 966bcfccdaSmpi # unblock thread $t 976bcfccdaSmpi # handle signal 986bcfccdaSmpi ./sigpthread -b -k $t -S -t 3 -u $t >out 996bcfccdaSmpi grep 'signal $t' out 1006bcfccdaSmpi test `wc -l <out` = 1 1016bcfccdaSmpi 1026bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t-unblock-$t-sleep-unblock 1036bcfccdaSmpirun-block-thread-3-kill-$t-unblock-$t-sleep-unblock: 1046bcfccdaSmpi # block signal 1056bcfccdaSmpi # run 3 threads 1066bcfccdaSmpi # kill thread $t 1076bcfccdaSmpi # suspend threads until signaled 1086bcfccdaSmpi # sleep in thread $t, others should be exited when unblocking 1096bcfccdaSmpi # unblock thread $t 1106bcfccdaSmpi # handle signal 1116bcfccdaSmpi ./sigpthread -b -k $t -t 3 -U -u $t >out 1126bcfccdaSmpi grep 'signal $t' out 1136bcfccdaSmpi test `wc -l <out` = 1 1146bcfccdaSmpi 1156bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t 1166bcfccdaSmpirun-block-thread-3-kill-$t: 1176bcfccdaSmpi # block signal 1186bcfccdaSmpi # run 3 threads 1196bcfccdaSmpi # kill thread $t 1206bcfccdaSmpi # suspend threads until signaled 1216bcfccdaSmpi # unblock all threads 1226bcfccdaSmpi # handle signal 1236bcfccdaSmpi ./sigpthread -b -k $t -t 3 >out 1246bcfccdaSmpi grep 'signal $t' out 1256bcfccdaSmpi test `wc -l <out` = 1 1266bcfccdaSmpi 1276bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-main-kill-$t 1286bcfccdaSmpirun-block-thread-3-sleep-main-kill-$t: 1296bcfccdaSmpi # block signal 1306bcfccdaSmpi # run 3 threads 1316bcfccdaSmpi # suspend threads until signaled 1326bcfccdaSmpi # sleep in main thread, signal should be received while suspended 1336bcfccdaSmpi # kill thread $t 1346bcfccdaSmpi # unblock all threads 1356bcfccdaSmpi # handle signal 1366bcfccdaSmpi ./sigpthread -b -k $t -s -t 3 >out 1376bcfccdaSmpi grep 'signal $t' out 1386bcfccdaSmpi test `wc -l <out` = 1 1396bcfccdaSmpi 1406bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t-sleep-thread 1416bcfccdaSmpirun-block-thread-3-kill-$t-sleep-thread: 1426bcfccdaSmpi # block signal 1436bcfccdaSmpi # run 3 threads 1446bcfccdaSmpi # kill thread $t 1456bcfccdaSmpi # sleep in threads, signal should be pending when suspending 1466bcfccdaSmpi # suspend threads until signaled 1476bcfccdaSmpi # unblock all threads 1486bcfccdaSmpi # handle signal 1496bcfccdaSmpi ./sigpthread -b -k $t -S -t 3 >out 1506bcfccdaSmpi grep 'signal $t' out 1516bcfccdaSmpi test `wc -l <out` = 1 1526bcfccdaSmpi 1536bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t-sleep-unblock 1546bcfccdaSmpirun-block-thread-3-kill-$t-sleep-unblock: 1556bcfccdaSmpi # block signal 1566bcfccdaSmpi # run 3 threads 1576bcfccdaSmpi # kill thread $t 1586bcfccdaSmpi # suspend threads until signaled 1596bcfccdaSmpi # sleep in all threads 1606bcfccdaSmpi # unblock all threads 1616bcfccdaSmpi # handle signal 1626bcfccdaSmpi ./sigpthread -b -k $t -t 3 -U >out 1636bcfccdaSmpi grep 'signal $t' out 1646bcfccdaSmpi test `wc -l <out` = 1 1656bcfccdaSmpi 1666bcfccdaSmpi.endfor 1676bcfccdaSmpi 1686bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3 1696bcfccdaSmpirun-block-thread-3: 1706bcfccdaSmpi # block signal 1716bcfccdaSmpi # run 3 threads 1726bcfccdaSmpi # kill process 1736bcfccdaSmpi # suspend threads until signaled 1746bcfccdaSmpi # unblock all threads 1756bcfccdaSmpi # handle signal 1766bcfccdaSmpi ./sigpthread -b -t 3 >out 1776bcfccdaSmpi grep 'signal [0-2]' out 1786bcfccdaSmpi test `wc -l <out` = 1 1796bcfccdaSmpi 1806bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-main 1816bcfccdaSmpirun-block-thread-3-sleep-main: 1826bcfccdaSmpi # block signal 1836bcfccdaSmpi # run 3 threads 1846bcfccdaSmpi # suspend threads until signaled 1856bcfccdaSmpi # sleep in main thread, signal should be received while suspended 1866bcfccdaSmpi # kill process 1876bcfccdaSmpi # unblock all threads 1886bcfccdaSmpi # handle signal 1896bcfccdaSmpi ./sigpthread -b -s -t 3 >out 1906bcfccdaSmpi grep 'signal [0-2]' out 1916bcfccdaSmpi test `wc -l <out` = 1 1926bcfccdaSmpi 1936bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-thread 1946bcfccdaSmpirun-block-thread-3-sleep-thread: 1956bcfccdaSmpi # block signal 1966bcfccdaSmpi # run 3 threads 1976bcfccdaSmpi # kill process 1986bcfccdaSmpi # sleep in threads, signal should be pending when suspending 1996bcfccdaSmpi # suspend threads until signaled 2006bcfccdaSmpi # unblock all threads 2016bcfccdaSmpi # handle signal 2026bcfccdaSmpi ./sigpthread -b -S -t 3 >out 2036bcfccdaSmpi grep 'signal [0-2]' out 2046bcfccdaSmpi test `wc -l <out` = 1 2056bcfccdaSmpi 2066bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-unblock 2076bcfccdaSmpirun-block-thread-3-sleep-unblock: 2086bcfccdaSmpi # block signal 2096bcfccdaSmpi # run 3 threads 2106bcfccdaSmpi # kill process 2116bcfccdaSmpi # suspend threads until signaled 2126bcfccdaSmpi # sleep in all threads 2136bcfccdaSmpi # unblock all threads 2146bcfccdaSmpi # handle signal 2156bcfccdaSmpi ./sigpthread -b -t 3 -U >out 2166bcfccdaSmpi grep 'signal [0-2]' out 2176bcfccdaSmpi test `wc -l <out` = 1 2186bcfccdaSmpi 2196bcfccdaSmpi# check what happens if signals are not blocked but delivered immediately 2206bcfccdaSmpi 2216bcfccdaSmpi.for t in 0 1 2 2226bcfccdaSmpi 2236bcfccdaSmpiREGRESS_TARGETS += run-thread-3-kill-$t 2246bcfccdaSmpirun-thread-3-kill-$t: 2256bcfccdaSmpi # run 3 threads 2266bcfccdaSmpi # kill thread $t 2276bcfccdaSmpi # handle signal 2286bcfccdaSmpi # suspend threads until signaled 2296bcfccdaSmpi ./sigpthread -k $t -t 3 >out 2306bcfccdaSmpi grep 'signal $t' out 2316bcfccdaSmpi test `wc -l <out` = 1 2326bcfccdaSmpi 2336bcfccdaSmpiREGRESS_TARGETS += run-thread-3-sleep-main-kill-$t 2346bcfccdaSmpirun-thread-3-sleep-main-kill-$t: 2356bcfccdaSmpi # run 3 threads 2366bcfccdaSmpi # suspend threads until signaled 2376bcfccdaSmpi # sleep in main thread, signal should be received while suspended 2386bcfccdaSmpi # kill thread $t 2396bcfccdaSmpi # handle signal 2406bcfccdaSmpi ./sigpthread -k $t -s -t 3 >out 2416bcfccdaSmpi grep 'signal $t' out 2426bcfccdaSmpi test `wc -l <out` = 1 2436bcfccdaSmpi 2446bcfccdaSmpiREGRESS_TARGETS += run-thread-3-kill-$t-sleep-thread 2456bcfccdaSmpirun-thread-3-kill-$t-sleep-thread: 2466bcfccdaSmpi # run 3 threads 2476bcfccdaSmpi # kill thread $t 2486bcfccdaSmpi # sleep in threads, signal should be received while sleeping 2496bcfccdaSmpi # handle signal 2506bcfccdaSmpi # suspend threads until signaled 2516bcfccdaSmpi ./sigpthread -k $t -S -t 3 >out 2526bcfccdaSmpi grep 'signal $t' out 2536bcfccdaSmpi test `wc -l <out` = 1 2546bcfccdaSmpi 2556bcfccdaSmpiREGRESS_TARGETS += run-thread-3-kill-$t-sleep-unblock 2566bcfccdaSmpirun-thread-3-kill-$t-sleep-unblock: 2576bcfccdaSmpi # run 3 threads 2586bcfccdaSmpi # kill thread $t 2596bcfccdaSmpi # handle signal 2606bcfccdaSmpi # suspend threads until signaled 2616bcfccdaSmpi # sleep in all threads 2626bcfccdaSmpi ./sigpthread -k $t -t 3 -U >out 2636bcfccdaSmpi grep 'signal $t' out 2646bcfccdaSmpi test `wc -l <out` = 1 2656bcfccdaSmpi 2666bcfccdaSmpi.endfor 2676bcfccdaSmpi 2686bcfccdaSmpiREGRESS_TARGETS += run-thread-3 2696bcfccdaSmpirun-thread-3: 2706bcfccdaSmpi # run 3 threads 2716bcfccdaSmpi # kill process 2726bcfccdaSmpi # handle signal 2736bcfccdaSmpi # suspend threads until signaled 2746bcfccdaSmpi ./sigpthread -t 3 >out 2756bcfccdaSmpi grep 'signal [0-2]' out 2766bcfccdaSmpi test `wc -l <out` = 1 2776bcfccdaSmpi 2786bcfccdaSmpiREGRESS_TARGETS += run-thread-3-sleep-main 2796bcfccdaSmpirun-thread-3-sleep-main: 2806bcfccdaSmpi # block signal 2816bcfccdaSmpi # run 3 threads 2826bcfccdaSmpi # suspend threads until signaled 2836bcfccdaSmpi # sleep in main thread, signal should be received while suspended 2846bcfccdaSmpi # kill process 2856bcfccdaSmpi # handle signal 2866bcfccdaSmpi ./sigpthread -s -t 3 >out 2876bcfccdaSmpi grep 'signal [0-2]' out 2886bcfccdaSmpi test `wc -l <out` = 1 2896bcfccdaSmpi 2906bcfccdaSmpiREGRESS_TARGETS += run-thread-3-sleep-thread 2916bcfccdaSmpirun-thread-3-sleep-thread: 2926bcfccdaSmpi # run 3 threads 2936bcfccdaSmpi # kill process 2946bcfccdaSmpi # sleep in threads, signal should be received while sleeping 2956bcfccdaSmpi # handle signal 2966bcfccdaSmpi # suspend threads until signaled 2976bcfccdaSmpi ./sigpthread -S -t 3 >out 2986bcfccdaSmpi grep 'signal [0-2]' out 2996bcfccdaSmpi test `wc -l <out` = 1 3006bcfccdaSmpi 3016bcfccdaSmpiREGRESS_TARGETS += run-thread-3-sleep-unblock 3026bcfccdaSmpirun-thread-3-sleep-unblock: 3036bcfccdaSmpi # run 3 threads 3046bcfccdaSmpi # kill process 3056bcfccdaSmpi # handle signal 3066bcfccdaSmpi # suspend threads until signaled 3076bcfccdaSmpi # sleep in all threads 3086bcfccdaSmpi ./sigpthread -t 3 -U >out 3096bcfccdaSmpi grep 'signal [0-2]' out 3106bcfccdaSmpi test `wc -l <out` = 1 3116bcfccdaSmpi 3126bcfccdaSmpi# signals are blocked and received by sigwait 3136bcfccdaSmpi 3146bcfccdaSmpi.for t in 0 1 2 3156bcfccdaSmpi 3166bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-waiter-$t 3176bcfccdaSmpirun-block-thread-3-waiter-$t: 3186bcfccdaSmpi # block signal 3196bcfccdaSmpi # run 3 threads 3206bcfccdaSmpi # kill process 3216bcfccdaSmpi # wait for signal in thread $t 3226bcfccdaSmpi # suspend threads until signaled 3236bcfccdaSmpi ./sigpthread -b -t 3 -w $t >out 3246bcfccdaSmpi grep 'signal $t' out 3256bcfccdaSmpi test `wc -l <out` = 1 3266bcfccdaSmpi 3276bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-main-waiter-$t 3286bcfccdaSmpirun-block-thread-3-sleep-main-waiter-$t: 3296bcfccdaSmpi # block signal 3306bcfccdaSmpi # run 3 threads 3316bcfccdaSmpi # wait for signal in thread $t 3326bcfccdaSmpi # suspend threads until signaled 3336bcfccdaSmpi # sleep in main thread, signal should be received while waiting 3346bcfccdaSmpi # kill process 3356bcfccdaSmpi ./sigpthread -b -s -t 3 -w $t >out 3366bcfccdaSmpi grep 'signal $t' out 3376bcfccdaSmpi test `wc -l <out` = 1 3386bcfccdaSmpi 3396bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-waiter-$t-sleep-thread 3406bcfccdaSmpirun-block-thread-3-sleep-thread-waiter-$t: 3416bcfccdaSmpi # block signal 3426bcfccdaSmpi # run 3 threads 3436bcfccdaSmpi # kill process 3446bcfccdaSmpi # sleep in threads, signal should be pending when waiting 3456bcfccdaSmpi # wait for signal in thread $t 3466bcfccdaSmpi # suspend threads until signaled 3476bcfccdaSmpi ./sigpthread -b -S -t 3 -w $t >out 3486bcfccdaSmpi grep 'signal $t' out 3496bcfccdaSmpi test `wc -l <out` = 1 3506bcfccdaSmpi 3516bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t-waiter-$t 3526bcfccdaSmpirun-block-thread-3-kill-$t-waiter-$t: 3536bcfccdaSmpi # block signal 3546bcfccdaSmpi # run 3 threads 3556bcfccdaSmpi # kill thread $t 3566bcfccdaSmpi # wait for signal in thread $t 3576bcfccdaSmpi # suspend threads until signaled 3586bcfccdaSmpi ./sigpthread -b -k $t -t 3 -w $t >out 3596bcfccdaSmpi grep 'signal $t' out 3606bcfccdaSmpi test `wc -l <out` = 1 3616bcfccdaSmpi 3626bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-sleep-main-kill-$t-waiter-$t 3636bcfccdaSmpirun-block-thread-3-sleep-main-kill-$t-waiter-$t: 3646bcfccdaSmpi # block signal 3656bcfccdaSmpi # run 3 threads 3666bcfccdaSmpi # wait for signal in thread $t 3676bcfccdaSmpi # suspend threads until signaled 3686bcfccdaSmpi # sleep in main thread, signal should be received while waiting 3696bcfccdaSmpi # kill thread $t 3706bcfccdaSmpi ./sigpthread -b -k $t -s -t 3 -w $t >out 3716bcfccdaSmpi grep 'signal $t' out 3726bcfccdaSmpi test `wc -l <out` = 1 3736bcfccdaSmpi 3746bcfccdaSmpiREGRESS_TARGETS += run-block-thread-3-kill-$t-sleep-thread-waiter-$t 3756bcfccdaSmpirun-block-thread-3-kill-$t-sleep-thread-waiter-$t: 3766bcfccdaSmpi # block signal 3776bcfccdaSmpi # run 3 threads 3786bcfccdaSmpi # kill thread $t 3796bcfccdaSmpi # sleep in threads, signal should be pending when waiting 3806bcfccdaSmpi # wait for signal in thread $t 3816bcfccdaSmpi # suspend threads until signaled 3826bcfccdaSmpi ./sigpthread -b -k $t -S -t 3 -w $t >out 3836bcfccdaSmpi grep 'signal $t' out 3846bcfccdaSmpi test `wc -l <out` = 1 3856bcfccdaSmpi 3866bcfccdaSmpi.endfor 3876bcfccdaSmpi 3886bcfccdaSmpi# simple tests with much more threads 3896bcfccdaSmpi 3906bcfccdaSmpiREGRESS_TARGETS += run-block-thread-100-unblock-23 3916bcfccdaSmpirun-block-thread-100-unblock-23: 3926bcfccdaSmpi # block signal 3936bcfccdaSmpi # run 100 threads 3946bcfccdaSmpi # kill process 3956bcfccdaSmpi # suspend threads until signaled 3966bcfccdaSmpi # unblock thread 23 3976bcfccdaSmpi # handle signal 3986bcfccdaSmpi ./sigpthread -b -t 100 -u 23 >out 3996bcfccdaSmpi grep 'signal 23' out 4006bcfccdaSmpi test `wc -l <out` = 1 4016bcfccdaSmpi 4026bcfccdaSmpiREGRESS_TARGETS += run-block-thread-100-waiter-42 4036bcfccdaSmpirun-block-thread-100-waiter-42: 4046bcfccdaSmpi # block signal 4056bcfccdaSmpi # run 100 threads 4066bcfccdaSmpi # kill process 4076bcfccdaSmpi # wait for signal in thread 42 4086bcfccdaSmpi # suspend threads until signaled 4096bcfccdaSmpi ./sigpthread -b -t 100 -w 42 >out 4106bcfccdaSmpi grep 'signal 42' out 4116bcfccdaSmpi test `wc -l <out` = 1 4126bcfccdaSmpi 4136bcfccdaSmpi${REGRESS_TARGETS}: ${PROG} 4146bcfccdaSmpi 4156bcfccdaSmpi.include <bsd.regress.mk> 416