I agree. But this was required by Maxim, If I understood him right. You can have a look at the previous versions (v4, v3) for different alternatives. I don't know what to do now. Maxim & Bill: If you can agree on something, I'd be happy to round that up :-).
Christophe On 6 April 2016 at 02:18, Bill Fischofer <bill.fischo...@linaro.org> wrote: > > > On Tue, Apr 5, 2016 at 3:03 AM, Christophe Milard < > christophe.mil...@linaro.org> wrote: > >> 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); >> > > Shouldn't the real test here be: > if (fifo_fd < 0) > exit(1); > > That's the actual error condition you're checking for. nb_sec >= > MAX_FIFO_WAIT is an indirect test based on the previous loop running to > completion, however it's error prone if some future maintenance is done > that would result in the loop exiting early. > > >> 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 >> > >
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp