mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
parallels: return PRL_RESULT from waitJob and getJobResult
Return error code, returned by parallels SDK from waitJob and getJobResult, so that caller can handle different errors. Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
This commit is contained in:
parent
7cbb50e912
commit
1679883a45
@ -131,13 +131,12 @@ logPrlEventErrorHelper(PRL_HANDLE event, const char *filename,
|
|||||||
logPrlEventErrorHelper(event, __FILE__, \
|
logPrlEventErrorHelper(event, __FILE__, \
|
||||||
__FUNCTION__, __LINE__)
|
__FUNCTION__, __LINE__)
|
||||||
|
|
||||||
static PRL_HANDLE
|
static PRL_RESULT
|
||||||
getJobResultHelper(PRL_HANDLE job, unsigned int timeout,
|
getJobResultHelper(PRL_HANDLE job, unsigned int timeout, PRL_HANDLE *result,
|
||||||
const char *filename, const char *funcname,
|
const char *filename, const char *funcname,
|
||||||
size_t linenr)
|
size_t linenr)
|
||||||
{
|
{
|
||||||
PRL_RESULT ret, retCode;
|
PRL_RESULT ret, retCode;
|
||||||
PRL_HANDLE result = NULL;
|
|
||||||
|
|
||||||
if ((ret = PrlJob_Wait(job, timeout))) {
|
if ((ret = PrlJob_Wait(job, timeout))) {
|
||||||
logPrlErrorHelper(ret, filename, funcname, linenr);
|
logPrlErrorHelper(ret, filename, funcname, linenr);
|
||||||
@ -163,36 +162,37 @@ getJobResultHelper(PRL_HANDLE job, unsigned int timeout,
|
|||||||
|
|
||||||
PrlHandle_Free(err_handle);
|
PrlHandle_Free(err_handle);
|
||||||
} else {
|
} else {
|
||||||
ret = PrlJob_GetResult(job, &result);
|
ret = PrlJob_GetResult(job, result);
|
||||||
if (PRL_FAILED(ret)) {
|
if (PRL_FAILED(ret)) {
|
||||||
logPrlErrorHelper(ret, filename, funcname, linenr);
|
logPrlErrorHelper(ret, filename, funcname, linenr);
|
||||||
PrlHandle_Free(result);
|
PrlHandle_Free(*result);
|
||||||
result = NULL;
|
*result = NULL;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ret = PRL_ERR_SUCCESS;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
PrlHandle_Free(job);
|
PrlHandle_Free(job);
|
||||||
return result;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define getJobResult(job, timeout) \
|
#define getJobResult(job, timeout, result) \
|
||||||
getJobResultHelper(job, timeout, __FILE__, \
|
getJobResultHelper(job, timeout, result, __FILE__, \
|
||||||
__FUNCTION__, __LINE__)
|
__FUNCTION__, __LINE__)
|
||||||
|
|
||||||
static int
|
static PRL_RESULT
|
||||||
waitJobHelper(PRL_HANDLE job, unsigned int timeout,
|
waitJobHelper(PRL_HANDLE job, unsigned int timeout,
|
||||||
const char *filename, const char *funcname,
|
const char *filename, const char *funcname,
|
||||||
size_t linenr)
|
size_t linenr)
|
||||||
{
|
{
|
||||||
PRL_HANDLE result = NULL;
|
PRL_HANDLE result = PRL_INVALID_HANDLE;
|
||||||
|
PRL_RESULT ret;
|
||||||
|
|
||||||
result = getJobResultHelper(job, timeout, filename, funcname, linenr);
|
ret = getJobResultHelper(job, timeout, &result,
|
||||||
if (result)
|
filename, funcname, linenr);
|
||||||
PrlHandle_Free(result);
|
PrlHandle_Free(result);
|
||||||
|
return ret;
|
||||||
return result ? 0 : -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define waitJob(job, timeout) \
|
#define waitJob(job, timeout) \
|
||||||
@ -267,7 +267,7 @@ prlsdkSdkDomainLookup(parallelsConnPtr privconn,
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
job = PrlSrv_GetVmConfig(privconn->server, id, flags);
|
job = PrlSrv_GetVmConfig(privconn->server, id, flags);
|
||||||
if (!(result = getJobResult(job, privconn->jobTimeout)))
|
if (PRL_FAILED(getJobResult(job, privconn->jobTimeout, &result)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
pret = PrlResult_GetParamByIndex(result, 0, sdkdom);
|
pret = PrlResult_GetParamByIndex(result, 0, sdkdom);
|
||||||
@ -384,7 +384,7 @@ prlsdkGetDomainState(parallelsConnPtr privconn,
|
|||||||
|
|
||||||
job = PrlVm_GetState(sdkdom);
|
job = PrlVm_GetState(sdkdom);
|
||||||
|
|
||||||
if (!(result = getJobResult(job, privconn->jobTimeout)))
|
if (PRL_FAILED(getJobResult(job, privconn->jobTimeout, &result)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
pret = PrlResult_GetParamByIndex(result, 0, &vmInfo);
|
pret = PrlResult_GetParamByIndex(result, 0, &vmInfo);
|
||||||
@ -1254,7 +1254,7 @@ prlsdkLoadDomains(parallelsConnPtr privconn)
|
|||||||
|
|
||||||
job = PrlSrv_GetVmListEx(privconn->server, PVTF_VM | PVTF_CT);
|
job = PrlSrv_GetVmListEx(privconn->server, PVTF_VM | PVTF_CT);
|
||||||
|
|
||||||
if (!(result = getJobResult(job, privconn->jobTimeout)))
|
if (PRL_FAILED(getJobResult(job, privconn->jobTimeout, &result)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
pret = PrlResult_GetParamsCount(result, ¶msCount);
|
pret = PrlResult_GetParamsCount(result, ¶msCount);
|
||||||
@ -1604,7 +1604,7 @@ int prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
|
|||||||
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
||||||
|
|
||||||
job = PrlVm_StartEx(sdkdom, PSM_VM_START, 0);
|
job = PrlVm_StartEx(sdkdom, PSM_VM_START, 0);
|
||||||
return waitJob(job, privconn->jobTimeout);
|
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int prlsdkStopEx(parallelsConnPtr privconn,
|
static int prlsdkStopEx(parallelsConnPtr privconn,
|
||||||
@ -1614,7 +1614,7 @@ static int prlsdkStopEx(parallelsConnPtr privconn,
|
|||||||
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
||||||
|
|
||||||
job = PrlVm_StopEx(sdkdom, mode, 0);
|
job = PrlVm_StopEx(sdkdom, mode, 0);
|
||||||
return waitJob(job, privconn->jobTimeout);
|
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int prlsdkKill(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
|
int prlsdkKill(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
|
||||||
@ -1632,7 +1632,7 @@ int prlsdkPause(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
|
|||||||
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
||||||
|
|
||||||
job = PrlVm_Pause(sdkdom, false);
|
job = PrlVm_Pause(sdkdom, false);
|
||||||
return waitJob(job, privconn->jobTimeout);
|
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int prlsdkResume(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
|
int prlsdkResume(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
|
||||||
@ -1640,7 +1640,7 @@ int prlsdkResume(parallelsConnPtr privconn, PRL_HANDLE sdkdom)
|
|||||||
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
PRL_HANDLE job = PRL_INVALID_HANDLE;
|
||||||
|
|
||||||
job = PrlVm_Resume(sdkdom);
|
job = PrlVm_Resume(sdkdom);
|
||||||
return waitJob(job, privconn->jobTimeout);
|
return PRL_FAILED(waitJob(job, privconn->jobTimeout)) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -2611,14 +2611,15 @@ prlsdkApplyConfig(virConnectPtr conn,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
job = PrlVm_BeginEdit(sdkdom);
|
job = PrlVm_BeginEdit(sdkdom);
|
||||||
if (waitJob(job, privconn->jobTimeout) < 0)
|
if (PRL_FAILED(waitJob(job, privconn->jobTimeout)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ret = prlsdkDoApplyConfig(sdkdom, new);
|
ret = prlsdkDoApplyConfig(sdkdom, new);
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
job = PrlVm_Commit(sdkdom);
|
job = PrlVm_Commit(sdkdom);
|
||||||
ret = waitJob(job, privconn->jobTimeout);
|
if (PRL_FAILED(waitJob(job, privconn->jobTimeout)))
|
||||||
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrlHandle_Free(sdkdom);
|
PrlHandle_Free(sdkdom);
|
||||||
@ -2641,7 +2642,7 @@ prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def)
|
|||||||
prlsdkCheckRetGoto(pret, cleanup);
|
prlsdkCheckRetGoto(pret, cleanup);
|
||||||
|
|
||||||
job = PrlSrv_GetSrvConfig(privconn->server);
|
job = PrlSrv_GetSrvConfig(privconn->server);
|
||||||
if (!(result = getJobResult(job, privconn->jobTimeout)))
|
if (PRL_FAILED(getJobResult(job, privconn->jobTimeout, &result)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
pret = PrlResult_GetParamByIndex(result, 0, &srvconf);
|
pret = PrlResult_GetParamByIndex(result, 0, &srvconf);
|
||||||
@ -2655,7 +2656,8 @@ prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
job = PrlVm_Reg(sdkdom, "", 1);
|
job = PrlVm_Reg(sdkdom, "", 1);
|
||||||
ret = waitJob(job, privconn->jobTimeout);
|
if (PRL_FAILED(waitJob(job, privconn->jobTimeout)))
|
||||||
|
ret = -1;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
PrlHandle_Free(sdkdom);
|
PrlHandle_Free(sdkdom);
|
||||||
@ -2687,7 +2689,7 @@ prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
|
|||||||
confParam.nOsVersion = 0;
|
confParam.nOsVersion = 0;
|
||||||
|
|
||||||
job = PrlSrv_GetDefaultVmConfig(privconn->server, &confParam, 0);
|
job = PrlSrv_GetDefaultVmConfig(privconn->server, &confParam, 0);
|
||||||
if (!(result = getJobResult(job, privconn->jobTimeout)))
|
if (PRL_FAILED(getJobResult(job, privconn->jobTimeout, &result)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
pret = PrlResult_GetParamByIndex(result, 0, &sdkdom);
|
pret = PrlResult_GetParamByIndex(result, 0, &sdkdom);
|
||||||
@ -2703,11 +2705,12 @@ prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
job = PrlVm_RegEx(sdkdom, "", PACF_NON_INTERACTIVE_MODE);
|
job = PrlVm_RegEx(sdkdom, "", PACF_NON_INTERACTIVE_MODE);
|
||||||
ret = waitJob(job, privconn->jobTimeout);
|
if (PRL_FAILED(waitJob(job, privconn->jobTimeout)))
|
||||||
|
ret = -1;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
PrlHandle_Free(sdkdom);
|
PrlHandle_Free(sdkdom);
|
||||||
return ret;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -2717,7 +2720,7 @@ prlsdkUnregisterDomain(parallelsConnPtr privconn, virDomainObjPtr dom)
|
|||||||
PRL_HANDLE job;
|
PRL_HANDLE job;
|
||||||
|
|
||||||
job = PrlVm_Unreg(privdom->sdkdom);
|
job = PrlVm_Unreg(privdom->sdkdom);
|
||||||
if (waitJob(job, privconn->jobTimeout))
|
if (PRL_FAILED(waitJob(job, privconn->jobTimeout)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (prlsdkSendEvent(privconn, dom, VIR_DOMAIN_EVENT_UNDEFINED,
|
if (prlsdkSendEvent(privconn, dom, VIR_DOMAIN_EVENT_UNDEFINED,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user