From 545e7ca67bea43fc206b135cbc60637c52a2e3f3 Mon Sep 17 00:00:00 2001 From: Xiong Zhou Date: Fri, 23 Mar 2018 10:49:37 +0800 Subject: [PATCH] generic/478: fix potential test blocking Reduce semtimedop timeout to 5s, 15s is too long if something get tangled up. Add retry counting to getlk routine, infinite loop is dangerous. If something goes wrong unexpextedly, test is blocked and wasting time. Signed-off-by: Xiong Zhou Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- src/t_ofd_locks.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/t_ofd_locks.c b/src/t_ofd_locks.c index d578cd71..e3b15ddc 100644 --- a/src/t_ofd_locks.c +++ b/src/t_ofd_locks.c @@ -317,14 +317,14 @@ int main(int argc, char **argv) sop.sem_num = 0; sop.sem_op = 1; sop.sem_flg = 0; - ts.tv_sec = 15; + ts.tv_sec = 5; ts.tv_nsec = 0; if (semtimedop(semid, &sop, 1, &ts) == -1) err_exit("inc sem0 2", errno); sop.sem_num = 1; sop.sem_op = 1; sop.sem_flg = 0; - ts.tv_sec = 15; + ts.tv_sec = 5; ts.tv_nsec = 0; if (semtimedop(semid, &sop, 1, &ts) == -1) err_exit("inc sem1 2", errno); @@ -376,7 +376,7 @@ int main(int argc, char **argv) sop.sem_num = 1; sop.sem_op = 0; sop.sem_flg = 0; - ts.tv_sec = 15; + ts.tv_sec = 5; ts.tv_nsec = 0; if (semtimedop(semid, &sop, 1, &ts) == -1) err_exit("wait sem1 0", errno); @@ -391,14 +391,18 @@ int main(int argc, char **argv) /* getlck */ if (lock_cmd == 0) { /* wait sem created and initialized */ + retry = 5; do { semid = semget(semkey, 2, 0); if (semid != -1) break; - if (errno == ENOENT) + if (errno == ENOENT && retry) { + sleep(1); + retry--; continue; - else + } else { err_exit("getlk_semget", errno); + } } while (1); do { memset(&sem_ds, 0, sizeof(sem_ds)); @@ -410,7 +414,7 @@ int main(int argc, char **argv) sop.sem_num = 0; sop.sem_op = 0; sop.sem_flg = 0; - ts.tv_sec = 15; + ts.tv_sec = 5; ts.tv_nsec = 0; if (semtimedop(semid, &sop, 1, &ts) == -1) err_exit("wait sem0 0", errno); -- 2.47.3