Awake can now interrupt several blocking syscalls (even during note handling). Among others, it can interrupt await, pread and pwrite. It cannot interrupt several others for different reasons: - awake cannot be interrupted by awake; - syscalls like remove and create can be used for kernel comunication and it would be hard to know if the effect occurred in the receiving fs if they were interrupted; - other syscalls do not need awake since they just provide access to kernel infos (eg seek or fd2path) NOTE: awakes registered before a note cannot occur during the note handling and will be deferred till the next call to noted.
		
			
				
	
	
		
			36 lines
		
	
	
		
			800 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			800 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/cmd/rc
 | |
| 
 | |
| # this test ensure that notes are enqueued in kernel
 | |
| 
 | |
| runner=$0
 | |
| test = `{echo $runner|sed 's/.runner//'}
 | |
| test_output = /tmp/output-`{basename $test}
 | |
| 
 | |
| if ( test -e $test_output) rm $test_output
 | |
| 
 | |
| $test $test_output &
 | |
| testpid = $apid
 | |
| 
 | |
| while ( ! test -e $test_output ) { sleep 2 }
 | |
| 
 | |
| echo $test started, output to $test_output, kill at /proc/$testpid/ctl
 | |
| 
 | |
| echo -n first > /proc/$testpid/note
 | |
| echo -n second > /proc/$testpid/note
 | |
| echo -n stop > /proc/$testpid/note
 | |
| 
 | |
| wait $testpid
 | |
| 
 | |
| if ( cat $test_output | grep 'waiting after first.......................' > /dev/null ) {
 | |
| if ( cat $test_output | grep 'waiting after second.......................' > /dev/null ) {
 | |
| if ( cat $test_output | grep 'PASS' > /dev/null ) {
 | |
| 	rm $test_output
 | |
| 	echo PASS
 | |
| 	exit PASS
 | |
| }
 | |
| }
 | |
| }
 | |
| cat $test_output
 | |
| echo FAIL
 | |
| exit FAIL
 |