diff options
Diffstat (limited to 'testsuite/systemtap.base')
-rw-r--r-- | testsuite/systemtap.base/poll_map.exp | 14 | ||||
-rwxr-xr-x | testsuite/systemtap.base/poll_map.stp | 33 |
2 files changed, 47 insertions, 0 deletions
diff --git a/testsuite/systemtap.base/poll_map.exp b/testsuite/systemtap.base/poll_map.exp new file mode 100644 index 00000000..5ade48e6 --- /dev/null +++ b/testsuite/systemtap.base/poll_map.exp @@ -0,0 +1,14 @@ +set test "poll_map" +if {![installtest_p]} { untested $test; return } + +spawn stap -g $srcdir/$subdir/poll_map.stp +set ok 0 +expect { + -timeout 400 + -ex "SUCCESS" { incr ok } + timeout { fail "$test (timeout)" } + eof { } +} +close +wait +if {$ok == 1} { pass "$test ($ok)" } { fail "$test ($ok)" } diff --git a/testsuite/systemtap.base/poll_map.stp b/testsuite/systemtap.base/poll_map.stp new file mode 100755 index 00000000..cd39b433 --- /dev/null +++ b/testsuite/systemtap.base/poll_map.stp @@ -0,0 +1,33 @@ +#! stap + +# test that polling loops do not exit when conflicts happen +# see PR 1379 + +global called, num_polls + +probe kernel.function( "sys_*" ).call { + called[execname(),probefunc()]++ +} + +probe timer.ms(1000) +{ + print("\n\n") + num_to_do = 10 + foreach ([n,f] in called-) { + printf("%s called %s\t%d times\n", n, f, called[n,f]) + num_to_do-- + if (num_to_do <= 0) + break + } + delete called + num_polls++ + if (num_polls > 30) + exit() +} + +probe end { + if (num_polls <= 30) + print ("FAIL\n") + else + print ("SUCCESS\n") +} |