Fixes: https://bugs.linaro.org/show_bug.cgi?id=2146 (CID 159395)
The open system call is directely used to check the presence of the fifo
and open it at the same time.

Signed-off-by: Christophe Milard <christophe.mil...@linaro.org>
---
 since v4: test after loop (Maxim)
 since v3: nb_sec incremented in loop rather then at test time. (Maxim)
 since v2: bug URL added (Anders)
 since v1: changed loop to avoid open() line duplication (Maxim)

 platform/linux-generic/test/shmem/shmem_linux.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/platform/linux-generic/test/shmem/shmem_linux.c 
b/platform/linux-generic/test/shmem/shmem_linux.c
index 12266cc..5a9be4d 100644
--- a/platform/linux-generic/test/shmem/shmem_linux.c
+++ b/platform/linux-generic/test/shmem/shmem_linux.c
@@ -50,6 +50,7 @@
 
 #define ODP_APP_NAME "shmem_odp" /* name of the odp program, in this dir */
 #define DEVNAME_FMT "odp-%d-%s"  /* shm device format: odp-<pid>-<name>  */
+#define MAX_FIFO_WAIT 30         /* Max time waiting for the fifo (sec)  */
 
 void test_success(char *fifo_name, int fd, pid_t odp_app)
 {
@@ -89,7 +90,7 @@ int main(int argc __attribute__((unused)), char *argv[])
 {
        char prg_name[PATH_MAX];
        char odp_name[PATH_MAX];
-       int nb_sec = 0;
+       int nb_sec;
        int size;
        pid_t odp_app;
        char *odp_params = NULL;
@@ -115,12 +116,14 @@ int main(int argc __attribute__((unused)), char *argv[])
         * Just die if time expire as there is no fifo to communicate
         * through... */
        sprintf(fifo_name, FIFO_NAME_FMT, odp_app);
-       while (access(fifo_name, W_OK) != 0) {
+       for (nb_sec = 0; nb_sec < MAX_FIFO_WAIT; nb_sec++) {
+               fifo_fd = open(fifo_name, O_WRONLY);
+               if (fifo_fd >= 0)
+                       break;
                sleep(1);
-               if  (nb_sec++ == 30)
-                       exit(1);
        }
-       fifo_fd = open(fifo_name, O_WRONLY);
+       if (nb_sec >= MAX_FIFO_WAIT)
+               exit(1);
        printf("pipe found\n");
 
        /* the linux named pipe has now been found, meaning that the
-- 
2.1.4

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to