Exemplo n.º 1
0
virNetServerPtr
virNetDaemonAddServerPostExec(virNetDaemonPtr dmn,
                              virNetServerClientPrivNew clientPrivNew,
                              virNetServerClientPrivNewPostExecRestart clientPrivNewPostExecRestart,
                              virNetServerClientPrivPreExecRestart clientPrivPreExecRestart,
                              virFreeCallback clientPrivFree,
                              void *clientPrivOpaque)
{
    virJSONValuePtr object = NULL;
    virNetServerPtr srv = NULL;

    virObjectLock(dmn);

    if (!dmn->srvObject) {
        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                       _("Cannot add more servers post-exec than "
                         "there were pre-exec"));
        goto error;
    }

    if (virJSONValueIsArray(dmn->srvObject)) {
        object = virJSONValueArraySteal(dmn->srvObject, 0);
        if (virJSONValueArraySize(dmn->srvObject) == 0) {
            virJSONValueFree(dmn->srvObject);
            dmn->srvObject = NULL;
        }
    } else {
        object = dmn->srvObject;
        dmn->srvObject = NULL;
    }

    srv = virNetServerNewPostExecRestart(object,
                                         clientPrivNew,
                                         clientPrivNewPostExecRestart,
                                         clientPrivPreExecRestart,
                                         clientPrivFree,
                                         clientPrivOpaque);

    if (!srv || VIR_APPEND_ELEMENT_COPY(dmn->servers, dmn->nservers, srv) < 0)
        goto error;

    virJSONValueFree(object);
    virObjectUnlock(dmn);
    return srv;

 error:
    virObjectUnlock(dmn);
    virObjectUnref(srv);
    virJSONValueFree(object);
    return NULL;
}
Exemplo n.º 2
0
static virJSONValuePtr
testQEMUSchemaStealObjectMemberByName(const char *name,
                                      virJSONValuePtr members)
{
    virJSONValuePtr member;
    virJSONValuePtr ret = NULL;
    size_t i;

    for (i = 0; i < virJSONValueArraySize(members); i++) {
        member = virJSONValueArrayGet(members, i);

        if (STREQ_NULLABLE(name, virJSONValueObjectGetString(member, "name"))) {
            ret = virJSONValueArraySteal(members, i);
            break;
        }
    }

    return ret;
}