On Mon, 2008-06-02 at 17:11 +0200, Louis Rilling wrote:
> plain text document attachment
> (execve05-replace-arbitrary-sleep-with-pipe-based-synchro.patch)
> In execve05, the first child must keep a file open at least until the second
> child tries to execve() this file. However the test achieves this with a sleep
> of 10s, which may fail on loaded systems.
> 
> This patch replaces this (arbitrary) sleep with a pipe-based synchronization,
> where the parent notifies the first child once the second child has 
> terminated.
> 
> Signed-off-by: Louis Rilling <[EMAIL PROTECTED]>
Applied.

Regards--
Subrata
> ---
>  testcases/kernel/syscalls/execve/execve05.c |   30 
> ++++++++++++++++++++--------
>  1 file changed, 22 insertions(+), 8 deletions(-)
> 
> Index: b/testcases/kernel/syscalls/execve/execve05.c
> ===================================================================
> --- a/testcases/kernel/syscalls/execve/execve05.c     2008-06-02 
> 16:12:51.000000000 +0200
> +++ b/testcases/kernel/syscalls/execve/execve05.c     2008-06-02 
> 16:37:53.000000000 +0200
> @@ -70,7 +70,8 @@ void do_child_1(void);
>  void do_child_2(void);
> 
>  int exp_enos[] = {ETXTBSY, 0};
> -int sync_pipes[2];
> +int start_sync_pipes[2];
> +int end_sync_pipes[2];
> 
>  int Fflag = 0;
>  char *test_name;
> @@ -116,7 +117,9 @@ main(int ac, char **av)
>               /* reset Tst_count in case we are looping */
>               Tst_count = 0;
> 
> -             if (sync_pipe_create(sync_pipes) == -1)
> +             if (sync_pipe_create(start_sync_pipes) == -1)
> +                     tst_brkm(TBROK, cleanup, "sync_pipe_create failed");
> +             if (sync_pipe_create(end_sync_pipes) == -1)
>                       tst_brkm(TBROK, cleanup, "sync_pipe_create failed");
> 
>               /*
> @@ -138,10 +141,10 @@ main(int ac, char **av)
>  #endif
>               }
> 
> -             if (sync_pipe_wait(sync_pipes) == -1)
> +             if (sync_pipe_wait(start_sync_pipes) == -1)
>                       tst_brkm(TBROK, cleanup, "sync_pipe_wait failed");
> 
> -             if (sync_pipe_close(sync_pipes) == -1)
> +             if (sync_pipe_close(start_sync_pipes) == -1)
>                       tst_brkm(TBROK, cleanup, "sync_pipe_close failed");
> 
>               if ((pid1 = FORK_OR_VFORK()) == -1)
> @@ -151,6 +154,10 @@ main(int ac, char **av)
>                       argv[0] = 0;
>                       env[0] = 0;
> 
> +                     /* do not interfere with end synchronization of first
> +                      * child */
> +                     sync_pipe_close(end_sync_pipes);
> +
>                       TEST(execve(test_name, argv, env));
> 
>                       TEST_ERROR_LOG(TEST_ERRNO);
> @@ -170,7 +177,6 @@ main(int ac, char **av)
>                       exit(retval);   
>               } else {        /* parent */
>                        /* wait for the child to finish */
> -                     waitpid(pid,NULL,0);
>                          waitpid(pid1,&status,0);
>                          /* make sure the child returned a good exit status */
>                          e_code = status >> 8;
> @@ -181,6 +187,10 @@ main(int ac, char **av)
>                          if ((e_code != 3) || (retval != 3)) {
>                            tst_resm(TFAIL, "Failures reported above");
>                          }
> +
> +                     /*  terminate first child */
> +                     sync_pipe_notify(end_sync_pipes);
> +                     waitpid(pid,NULL,0);
>                       cleanup();
>               }
>       }
> @@ -243,12 +253,16 @@ do_child_1()
>               exit(1);        
>       }
> 
> -     if (sync_pipe_notify(sync_pipes) == -1)
> +     if (sync_pipe_notify(start_sync_pipes) == -1)
>               tst_brkm(TBROK, cleanup, "sync_pipe_notify failed");
> 
> -     if (sync_pipe_close(sync_pipes) == -1)
> +     if (sync_pipe_close(start_sync_pipes) == -1)
>               tst_brkm(TBROK, cleanup, "sync_pipe_close failed");
> 
> -     sleep(10);      /* let other child execve same file */
> +     /* let other child execve same file */
> +     if (sync_pipe_wait(end_sync_pipes) == -1) {
> +             tst_brkm(TBROK, NULL, "sync_pipe_wait failed");
> +             exit(1);
> +     }
>       exit(0);
>  }
> 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to