void virLogManagerFree(virLogManagerPtr mgr) { if (!mgr) return; if (mgr->client) virNetClientClose(mgr->client); virObjectUnref(mgr->program); virObjectUnref(mgr->client); VIR_FREE(mgr); }
static virNetClientPtr virLogManagerConnect(bool privileged, virNetClientProgramPtr *prog) { virNetClientPtr client = NULL; char *logdpath; char *daemonPath = NULL; *prog = NULL; if (!(logdpath = virLogManagerDaemonPath(privileged))) goto error; if (!privileged && !(daemonPath = virFileFindResourceFull("virtlogd", NULL, NULL, abs_topbuilddir "/src", SBINDIR, "VIRTLOGD_PATH"))) goto error; if (!(client = virNetClientNewUNIX(logdpath, daemonPath != NULL, daemonPath))) goto error; if (!(*prog = virNetClientProgramNew(VIR_LOG_MANAGER_PROTOCOL_PROGRAM, VIR_LOG_MANAGER_PROTOCOL_PROGRAM_VERSION, NULL, 0, NULL))) goto error; if (virNetClientAddProgram(client, *prog) < 0) goto error; VIR_FREE(daemonPath); VIR_FREE(logdpath); return client; error: VIR_FREE(daemonPath); VIR_FREE(logdpath); virNetClientClose(client); virObjectUnref(client); virObjectUnref(*prog); return NULL; }
static virNetClientPtr virLockManagerLockDaemonConnectionNew(bool privileged, virNetClientProgramPtr *prog) { virNetClientPtr client = NULL; char *lockdpath; const char *daemonPath = NULL; *prog = NULL; if (!(lockdpath = virLockManagerLockDaemonPath(privileged))) goto error; if (!privileged) daemonPath = virLockManagerLockDaemonFindDaemon(); if (!(client = virNetClientNewUNIX(lockdpath, daemonPath != NULL, daemonPath))) goto error; if (!(*prog = virNetClientProgramNew(VIR_LOCK_SPACE_PROTOCOL_PROGRAM, VIR_LOCK_SPACE_PROTOCOL_PROGRAM_VERSION, NULL, 0, NULL))) goto error; if (virNetClientAddProgram(client, *prog) < 0) goto error; VIR_FREE(lockdpath); return client; error: VIR_FREE(lockdpath); virNetClientClose(client); virObjectUnref(client); virObjectUnref(*prog); return NULL; }
static int virLockManagerLockDaemonSetupLockspace(const char *path) { virNetClientPtr client; virNetClientProgramPtr program = NULL; virLockSpaceProtocolCreateLockSpaceArgs args; int rv = -1; int counter = 0; memset(&args, 0, sizeof(args)); args.path = (char*)path; if (!(client = virLockManagerLockDaemonConnectionNew(getuid() == 0, &program))) return -1; if (virNetClientProgramCall(program, client, counter++, VIR_LOCK_SPACE_PROTOCOL_PROC_CREATE_LOCKSPACE, 0, NULL, NULL, NULL, (xdrproc_t)xdr_virLockSpaceProtocolCreateLockSpaceArgs, (char*)&args, (xdrproc_t)xdr_void, NULL) < 0) { virErrorPtr err = virGetLastError(); if (err && err->code == VIR_ERR_OPERATION_INVALID) { /* The lockspace already exists */ virResetLastError(); rv = 0; } else { goto cleanup; } } rv = 0; cleanup: virObjectUnref(program); virNetClientClose(client); virObjectUnref(client); return rv; }
static virNetClientPtr virLockManagerLockDaemonConnect(virLockManagerPtr lock, virNetClientProgramPtr *program, int *counter) { virNetClientPtr client; if (!(client = virLockManagerLockDaemonConnectionNew(getuid() == 0, program))) return NULL; if (virLockManagerLockDaemonConnectionRegister(lock, client, *program, counter) < 0) goto error; return client; error: virNetClientClose(client); virObjectUnref(client); return NULL; }