diff mbox

[KVM-AUTOTEST,1/1] KVM test: kvm_subprocess: don't immediately check /proc/$PID/cmdline

Message ID 7742e2533a12513e4ae94d9e6e8cc9c876a5a0a4.1249484236.git.mgoldish@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michael Goldish Aug. 5, 2009, 2:57 p.m. UTC
kvm_spawn.is_alive() incorrectly assumes that /proc/$PID/cmdline immediately
reflects the new command line of the forked process.  This makes it report
false negatives occasionally.  To prevent that, perform the command line check
only if the process is more than 10 seconds old, or if the process has been
pickled and unpickled.  In both cases, there is more than enough time for
/proc/$PID/cmdline to get updated.

Signed-off-by: Michael Goldish <mgoldish@redhat.com>
---
 client/tests/kvm/kvm_subprocess.py |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

Comments

Lucas Meneghel Rodrigues Aug. 7, 2009, 8:15 p.m. UTC | #1
On Wed, Aug 5, 2009 at 11:57 AM, Michael Goldish<mgoldish@redhat.com> wrote:
> kvm_spawn.is_alive() incorrectly assumes that /proc/$PID/cmdline immediately
> reflects the new command line of the forked process.  This makes it report
> false negatives occasionally.  To prevent that, perform the command line check
> only if the process is more than 10 seconds old, or if the process has been
> pickled and unpickled.  In both cases, there is more than enough time for
> /proc/$PID/cmdline to get updated.

Ok, bugfix applied!

> Signed-off-by: Michael Goldish <mgoldish@redhat.com>
> ---
>  client/tests/kvm/kvm_subprocess.py |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/client/tests/kvm/kvm_subprocess.py b/client/tests/kvm/kvm_subprocess.py
> index df1d562..457c12e 100644
> --- a/client/tests/kvm/kvm_subprocess.py
> +++ b/client/tests/kvm/kvm_subprocess.py
> @@ -214,6 +214,8 @@ class kvm_spawn:
>             # Wait for the server to complete its initialization
>             while not "Server %s ready" % self.id in sub.stdout.readline():
>                 pass
> +            # Remember the start time for is_alive()
> +            self.start_time = time.time()
>
>         # Open the reading pipes
>         self.reader_fds = {}
> @@ -379,6 +381,10 @@ class kvm_spawn:
>         except:
>             # If we couldn't find the file for some reason, skip the check
>             return True
> +        # If this process is new (less than 10 secs old) skip the check
> +        if hasattr(self, "start_time") and time.time() < self.start_time + 10:
> +            return True
> +        # Perform the check
>         if self.id in cmdline:
>             return True
>         return False
> --
> 1.5.4.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
diff mbox

Patch

diff --git a/client/tests/kvm/kvm_subprocess.py b/client/tests/kvm/kvm_subprocess.py
index df1d562..457c12e 100644
--- a/client/tests/kvm/kvm_subprocess.py
+++ b/client/tests/kvm/kvm_subprocess.py
@@ -214,6 +214,8 @@  class kvm_spawn:
             # Wait for the server to complete its initialization
             while not "Server %s ready" % self.id in sub.stdout.readline():
                 pass
+            # Remember the start time for is_alive()
+            self.start_time = time.time()
 
         # Open the reading pipes
         self.reader_fds = {}
@@ -379,6 +381,10 @@  class kvm_spawn:
         except:
             # If we couldn't find the file for some reason, skip the check
             return True
+        # If this process is new (less than 10 secs old) skip the check
+        if hasattr(self, "start_time") and time.time() < self.start_time + 10:
+            return True
+        # Perform the check
         if self.id in cmdline:
             return True
         return False