mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
Don't assume pid_t is the same size as an int
virPidFileReadPathIfAlive passed in an 'int *' where a 'pid_t *' was expected, which breaks on Mingw64 targets. Also a few places were using '%d' for formatting pid_t, change them to '%lld' and force a cast to the longer type as done elsewhere in the same file. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
eb0b42d80a
commit
6bf55a9752
@ -206,7 +206,7 @@ int virPidFileReadPathIfAlive(const char *path,
|
|||||||
pid_t *pid,
|
pid_t *pid,
|
||||||
const char *binPath)
|
const char *binPath)
|
||||||
{
|
{
|
||||||
int ret, retPid;
|
int ret;
|
||||||
bool isLink;
|
bool isLink;
|
||||||
char *procPath = NULL;
|
char *procPath = NULL;
|
||||||
char *procLink = NULL;
|
char *procLink = NULL;
|
||||||
@ -215,7 +215,7 @@ int virPidFileReadPathIfAlive(const char *path,
|
|||||||
char *resolvedProcLink = NULL;
|
char *resolvedProcLink = NULL;
|
||||||
const char deletedText[] = " (deleted)";
|
const char deletedText[] = " (deleted)";
|
||||||
size_t deletedTextLen = strlen(deletedText);
|
size_t deletedTextLen = strlen(deletedText);
|
||||||
|
pid_t retPid;
|
||||||
|
|
||||||
/* only set this at the very end on success */
|
/* only set this at the very end on success */
|
||||||
*pid = -1;
|
*pid = -1;
|
||||||
|
@ -250,7 +250,7 @@ virProcessKillPainfully(pid_t pid, bool force)
|
|||||||
int i, ret = -1;
|
int i, ret = -1;
|
||||||
const char *signame = "TERM";
|
const char *signame = "TERM";
|
||||||
|
|
||||||
VIR_DEBUG("vpid=%d force=%d", pid, force);
|
VIR_DEBUG("vpid=%lld force=%d", (long long)pid, force);
|
||||||
|
|
||||||
/* This loop sends SIGTERM, then waits a few iterations (10 seconds)
|
/* This loop sends SIGTERM, then waits a few iterations (10 seconds)
|
||||||
* to see if it dies. If the process still hasn't exited, and
|
* to see if it dies. If the process still hasn't exited, and
|
||||||
@ -265,8 +265,8 @@ virProcessKillPainfully(pid_t pid, bool force)
|
|||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
signum = SIGTERM; /* kindly suggest it should exit */
|
signum = SIGTERM; /* kindly suggest it should exit */
|
||||||
} else if ((i == 50) & force) {
|
} else if ((i == 50) & force) {
|
||||||
VIR_DEBUG("Timed out waiting after SIGTERM to process %d, "
|
VIR_DEBUG("Timed out waiting after SIGTERM to process %lld, "
|
||||||
"sending SIGKILL", pid);
|
"sending SIGKILL", (long long)pid);
|
||||||
/* No SIGKILL kill on Win32 ! Use SIGABRT instead which our
|
/* No SIGKILL kill on Win32 ! Use SIGABRT instead which our
|
||||||
* virProcessKill proc will handle more or less like SIGKILL */
|
* virProcessKill proc will handle more or less like SIGKILL */
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@ -283,8 +283,8 @@ virProcessKillPainfully(pid_t pid, bool force)
|
|||||||
if (virProcessKill(pid, signum) < 0) {
|
if (virProcessKill(pid, signum) < 0) {
|
||||||
if (errno != ESRCH) {
|
if (errno != ESRCH) {
|
||||||
virReportSystemError(errno,
|
virReportSystemError(errno,
|
||||||
_("Failed to terminate process %d with SIG%s"),
|
_("Failed to terminate process %lld with SIG%s"),
|
||||||
pid, signame);
|
(long long)pid, signame);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
ret = signum == SIGTERM ? 0 : 1;
|
ret = signum == SIGTERM ? 0 : 1;
|
||||||
@ -294,7 +294,8 @@ virProcessKillPainfully(pid_t pid, bool force)
|
|||||||
usleep(200 * 1000);
|
usleep(200 * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
VIR_DEBUG("Timed out waiting after SIGKILL to process %d", pid);
|
VIR_DEBUG("Timed out waiting after SIGKILL to process %lld",
|
||||||
|
(long long)pid);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user