[PATCH xorg-gtest] Wait for dummy X server to shut down in Environment::TearDown()

Stephen M. Webb stephen.webb at bregmasoft.ca
Fri Apr 20 17:39:50 PDT 2012


On 04/20/2012 12:45 PM, Chase Douglas wrote:
> If two xorg-gtest binaries are executed one after another, the second
> one may attempt to start its X server before the first one's X server
> has fully shut down. This leads to the second X server not starting.
> 
> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>

Reviewd-by: Stephen M. Webb <stephen.webb at bregmasoft.ca>

> ---
>  src/environment.cpp |   30 ++++++++++++++++++++++++------
>  1 files changed, 24 insertions(+), 6 deletions(-)
> 
> diff --git a/src/environment.cpp b/src/environment.cpp
> index c1c4d80..d7d1c82 100644
> --- a/src/environment.cpp
> +++ b/src/environment.cpp
> @@ -144,17 +144,35 @@ void xorg::testing::Environment::SetUp() {
>  }
>  
>  void xorg::testing::Environment::TearDown() {
> -  if (!d_->process.Terminate()) {
> -    std::cerr << "Warning: Failed to terminate dummy Xorg server: "
> -              << std::strerror(errno) << "\n";
> -    if (!d_->process.Kill())
> -      std::cerr << "Warning: Failed to kill dummy Xorg server: "
> -                << std::strerror(errno) << "\n";
> +  if (d_->process.Terminate()) {
> +    for (int i = 0; i < 10; i++) {
> +      int status;
> +      int pid = waitpid(d_->process.Pid(), &status, WNOHANG);
> +
> +      if (pid == d_->process.Pid())
> +        return;
> +
> +      sleep(1); /* Give the dummy X server more time to shut down */
> +    }
>    }
> +
> +  Kill();
>  }
>  
>  void xorg::testing::Environment::Kill() {
>    if (!d_->process.Kill())
>      std::cerr << "Warning: Failed to kill dummy Xorg server: "
>                << std::strerror(errno) << "\n";
> +
> +  for (int i = 0; i < 10; i++) {
> +    int status;
> +    int pid = waitpid(d_->process.Pid(), &status, WNOHANG);
> +
> +    if (pid == d_->process.Pid())
> +      return;
> +
> +      sleep(1); /* Give the dummy X server more time to shut down */
> +  }
> +
> +  std::cerr << "Warning: Dummy X server did not shut down\n";
>  }

-- 
Stephen M. Webb  <stephen.webb at bregmasoft.ca>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 900 bytes
Desc: OpenPGP digital signature
URL: <http://lists.x.org/archives/xorg-devel/attachments/20120420/efedf2ab/attachment.pgp>


More information about the xorg-devel mailing list