[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