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@xxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list