fix: fork's race-condition caused by child and grand-child
Refs: #1329 Change-Id: Ia2d7641d1203f40155fef5db718d1bb2c583c1c5
This commit is contained in:
committed by
Masamichi Takagi
parent
5b26fe2956
commit
911b07f507
43
test/issues/1329/C1329.sh
Executable file
43
test/issues/1329/C1329.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#/bin/sh
|
||||
|
||||
USELTP=1
|
||||
USEOSTEST=0
|
||||
|
||||
. ../../common.sh
|
||||
|
||||
issue="1329"
|
||||
tid=01
|
||||
|
||||
if [ `uname -p` == "x86_64" ]; then
|
||||
tname=`printf "C${issue}T%02d" ${tid}`
|
||||
echo "*** ${tname} start *******************************"
|
||||
for idx in `seq 1 300`;
|
||||
do
|
||||
echo "*** Rep: $idx ***"
|
||||
echo -n "** Start:"
|
||||
date "+%H:%M:%S"
|
||||
|
||||
sudo $MCEXEC $LTPBIN/msgctl11
|
||||
echo -n "** Done:"
|
||||
date "+%H:%M:%S"
|
||||
done
|
||||
echo "*** ${tname} PASSED"
|
||||
fi
|
||||
let tid++
|
||||
|
||||
for tp in fork01 fork02 fork03 fork04 fork05 fork06 fork07 fork08 fork09 fork10 fork11
|
||||
do
|
||||
tname=`printf "C${issue}T%02d" ${tid}`
|
||||
echo "*** ${tname} start *******************************"
|
||||
sudo $MCEXEC $LTPBIN/$tp 2>&1 | tee $tp.txt
|
||||
ok=`grep PASS $tp.txt | wc -l`
|
||||
ng=`grep FAIL $tp.txt | wc -l`
|
||||
if [ $ng = 0 ]; then
|
||||
echo "*** ${tname} PASSED ($ok)"
|
||||
else
|
||||
echo "*** ${tname} FAILED (ok=$ok ng=%ng)"
|
||||
fi
|
||||
let tid++
|
||||
echo ""
|
||||
done
|
||||
|
||||
9
test/issues/1329/Makefile
Normal file
9
test/issues/1329/Makefile
Normal file
@@ -0,0 +1,9 @@
|
||||
CFLAGS=-g
|
||||
LDFLAGS=
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
test: all
|
||||
./C1329.sh
|
||||
clean:
|
||||
rm -f $(TARGET) *.o *.txt
|
||||
30
test/issues/1329/README
Normal file
30
test/issues/1329/README
Normal file
@@ -0,0 +1,30 @@
|
||||
【Issue#1329 動作確認】
|
||||
□ テスト内容
|
||||
1. 以下のLTPを300回連続実行し、Issueで報告された症状が発生しないことを確認
|
||||
- msgctl11
|
||||
なお、本テストケースはapollo上では別の不具合によりテストが動作しないため、テスト対象から除外した
|
||||
|
||||
2. 以下のLTPを用いて既存のfork機能に影響が無いことを確認
|
||||
- fork01
|
||||
- fork02
|
||||
- fork03
|
||||
- fork04
|
||||
- fork05
|
||||
- fork06
|
||||
- fork07
|
||||
- fork08
|
||||
- fork09
|
||||
- fork10
|
||||
- fork11
|
||||
|
||||
□ 実行手順
|
||||
$ make test
|
||||
|
||||
McKernelのインストール先や、OSTEST, LTPの配置場所は、
|
||||
$HOME/.mck_test_config を参照している
|
||||
.mck_test_config は、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを
|
||||
$HOMEにコピーし、適宜編集する
|
||||
|
||||
□ 実行結果
|
||||
x86_64_result.log aarch64_result.log 参照。
|
||||
すべての項目をPASSしていることを確認。
|
||||
75
test/issues/1329/aarch64_result.log
Normal file
75
test/issues/1329/aarch64_result.log
Normal file
@@ -0,0 +1,75 @@
|
||||
*** C1329T02 start *******************************
|
||||
fork01 1 TPASS : fork() returned 20716
|
||||
fork01 2 TPASS : child pid and fork() return agree: 20716
|
||||
*** C1329T02 PASSED (2)
|
||||
|
||||
*** C1329T03 start *******************************
|
||||
fork02 0 TINFO : Inside parent
|
||||
fork02 0 TINFO : exit status of wait 0
|
||||
fork02 1 TPASS : test 1 PASSED
|
||||
*** C1329T03 PASSED (1)
|
||||
|
||||
*** C1329T04 start *******************************
|
||||
fork03 0 TINFO : process id in parent of child from fork : 20856
|
||||
fork03 1 TPASS : test 1 PASSED
|
||||
*** C1329T04 PASSED (1)
|
||||
|
||||
*** C1329T05 start *******************************
|
||||
fork04 1 TPASS : Env var TERM unchanged after fork(): xterm
|
||||
fork04 2 TPASS : Env var NoTSetzWq unchanged after fork(): getenv() does not find variable set
|
||||
fork04 3 TPASS : Env var TESTPROG unchanged after fork(): FRKTCS04
|
||||
*** C1329T05 PASSED (3)
|
||||
|
||||
*** C1329T06 start *******************************
|
||||
fork05 0 TINFO : %fs test only for ix86
|
||||
*** C1329T06 PASSED (0)
|
||||
|
||||
*** C1329T07 start *******************************
|
||||
fork06 0 TINFO : tries 1000
|
||||
fork06 0 TINFO : successes 1000
|
||||
fork06 0 TINFO : failures 0
|
||||
fork06 0 TINFO : There were no children to wait for
|
||||
*** C1329T07 PASSED (0)
|
||||
|
||||
*** C1329T08 start *******************************
|
||||
fork07 0 TINFO : Forking 100 children
|
||||
fork07 0 TINFO : Forked all 100 children, now collecting
|
||||
fork07 0 TINFO : Collected all 100 children
|
||||
fork07 1 TPASS : 100/100 children read correctly from an inheritted fd
|
||||
*** C1329T08 PASSED (1)
|
||||
|
||||
*** C1329T09 start *******************************
|
||||
fork08 0 TINFO : parent forksval: 1
|
||||
fork08 0 TINFO : second child got char: b
|
||||
fork08 1 TPASS : Test passed in childnumber 2
|
||||
fork08 0 TINFO : parent forksval: 1
|
||||
fork08 0 TINFO : parent forksval: 2
|
||||
fork08 0 TINFO : exit status of wait expected 0 got 0
|
||||
fork08 1 TPASS : parent test PASSED
|
||||
fork08 0 TINFO : exit status of wait expected 0 got 0
|
||||
fork08 2 TPASS : parent test PASSED
|
||||
fork08 0 TINFO : exit status of wait expected 0 got 0
|
||||
fork08 3 TPASS : parent test PASSED
|
||||
fork08 0 TINFO : Number of processes forked is 2
|
||||
*** C1329T09 PASSED (4)
|
||||
|
||||
*** C1329T10 start *******************************
|
||||
fork09 0 TINFO : OPEN_MAX is 1024
|
||||
fork09 0 TINFO : first file descriptor is 8
|
||||
fork09 0 TINFO : Parent reporting 1023 files open
|
||||
fork09 0 TINFO : Child opened new file #1023
|
||||
fork09 0 TINFO : OPEN_MAX is 1024
|
||||
fork09 0 TINFO : first file descriptor is 8
|
||||
fork09 0 TINFO : Parent reporting 1023 files open
|
||||
fork09 1 TPASS : test 1 PASSED
|
||||
*** C1329T10 PASSED (1)
|
||||
|
||||
*** C1329T11 start *******************************
|
||||
fork10 0 TINFO : fork child A
|
||||
fork10 1 TPASS : test 1 PASSED
|
||||
*** C1329T11 PASSED (1)
|
||||
|
||||
*** C1329T12 start *******************************
|
||||
fork11 1 TPASS : fork test passed, 100 processes
|
||||
*** C1329T12 PASSED (1)
|
||||
|
||||
1875
test/issues/1329/x86_64_result.log
Normal file
1875
test/issues/1329/x86_64_result.log
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user