
On 11/04/2014 10:51 AM, Martin Kletzander wrote:
Coverity found out the very obvious problem in the code. That is that virPidFileReleasePath() was called only if virPidFileAcquirePath() returned 0. But virPidFileAcquirePath() doesn't return only 0 on success, but the FD that needs to be closed.
Signed-off-by: Martin Kletzander <mkletzan@redhat.com> --- src/util/virpidfile.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/util/virpidfile.c b/src/util/virpidfile.c index 098458f..a77a326 100644 --- a/src/util/virpidfile.c +++ b/src/util/virpidfile.c @@ -592,9 +592,8 @@ virPidFileForceCleanupPath(const char *path) if (virPidFileReadPath(path, &pid) < 0) return -1;
- if (virPidFileAcquirePath(path, false, 0) == 0) { - virPidFileReleasePath(path, fd); - } else { + fd = virPidFileAcquirePath(path, false, 0); + if (fd < 0) { virResetLastError();
/* Only kill the process if the pid is valid one. 0 means @@ -607,5 +606,8 @@ virPidFileForceCleanupPath(const char *path) return -1; }
+ if (fd) + virPidFileReleasePath(path, fd); + return 0; }
ACK Pavel