Пример #1
0
virLogHandlerPtr
virLogHandlerNewPostExecRestart(virJSONValuePtr object,
                                bool privileged,
                                virLogHandlerShutdownInhibitor inhibitor,
                                void *opaque)
{
    virLogHandlerPtr handler;
    virJSONValuePtr files;
    ssize_t n;
    size_t i;

    if (!(handler = virLogHandlerNew(privileged,
                                     inhibitor,
                                     opaque)))
        return NULL;

    if (!(files = virJSONValueObjectGet(object, "files"))) {
        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                       _("Missing files data from JSON file"));
        goto error;
    }

    if ((n = virJSONValueArraySize(files)) < 0) {
        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                       _("Malformed files data from JSON file"));
        goto error;
    }

    for (i = 0; i < n; i++) {
        virLogHandlerLogFilePtr file;
        virJSONValuePtr child = virJSONValueArrayGet(files, i);

        if (!(file = virLogHandlerLogFilePostExecRestart(handler, child)))
            goto error;

        if (VIR_APPEND_ELEMENT_COPY(handler->files, handler->nfiles, file) < 0)
            goto error;

        if ((file->watch = virEventAddHandle(file->pipefd,
                                             VIR_EVENT_HANDLE_READABLE,
                                             virLogHandlerDomainLogFileEvent,
                                             handler,
                                             NULL)) < 0) {
            VIR_DELETE_ELEMENT(handler->files, handler->nfiles - 1, handler->nfiles);
            goto error;
        }
    }


    return handler;

 error:
    virObjectUnref(handler);
    return NULL;
}
Пример #2
0
static virLogDaemonPtr
virLogDaemonNew(virLogDaemonConfigPtr config, bool privileged)
{
    virLogDaemonPtr logd;

    if (VIR_ALLOC(logd) < 0)
        return NULL;

    if (virMutexInit(&logd->lock) < 0) {
        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                       _("Unable to initialize mutex"));
        VIR_FREE(logd);
        return NULL;
    }

    if (!(logd->srv = virNetServerNew("virtlogd", 1,
                                      1, 1, 0, config->max_clients,
                                      config->max_clients, -1, 0,
                                      NULL,
                                      virLogDaemonClientNew,
                                      virLogDaemonClientPreExecRestart,
                                      virLogDaemonClientFree,
                                      (void*)(intptr_t)(privileged ? 0x1 : 0x0))))
        goto error;

    if (!(logd->dmn = virNetDaemonNew()) ||
        virNetDaemonAddServer(logd->dmn, logd->srv) < 0)
        goto error;

    if (!(logd->handler = virLogHandlerNew(privileged,
                                           config->max_size,
                                           config->max_backups,
                                           virLogDaemonInhibitor,
                                           logd)))
        goto error;

    return logd;

 error:
    virLogDaemonFree(logd);
    return NULL;
}