static void virQEMUCapsMonitorNotify(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm ATTRIBUTE_UNUSED)
+ virDomainObjPtr vm ATTRIBUTE_UNUSED,
+ void *opaque ATTRIBUTE_UNUSED)
{
}
memset(&vm, 0, sizeof(vm));
vm.pid = pid;
- if (!(mon = qemuMonitorOpen(&vm, &config, true, &callbacks))) {
+ if (!(mon = qemuMonitorOpen(&vm, &config, true, &callbacks, NULL))) {
ret = 0;
goto cleanup;
}
virDomainObjPtr vm;
qemuMonitorCallbacksPtr cb;
+ void *callbackOpaque;
/* If there's a command being processed this will be
* non-NULL */
VIR_DEBUG("mon=%p", mon);
if (mon->cb && mon->cb->destroy)
- (mon->cb->destroy)(mon, mon->vm);
+ (mon->cb->destroy)(mon, mon->vm, mon->callbackOpaque);
virCondDestroy(&mon->notify);
VIR_FREE(mon->buffer);
virJSONValueFree(mon->options);
virObjectUnlock(mon);
virObjectUnref(mon);
VIR_DEBUG("Triggering EOF callback");
- (eofNotify)(mon, vm);
+ (eofNotify)(mon, vm, mon->callbackOpaque);
} else if (error) {
qemuMonitorErrorNotifyCallback errorNotify = mon->cb->errorNotify;
virDomainObjPtr vm = mon->vm;
virObjectUnlock(mon);
virObjectUnref(mon);
VIR_DEBUG("Triggering error callback");
- (errorNotify)(mon, vm);
+ (errorNotify)(mon, vm, mon->callbackOpaque);
} else {
virObjectUnlock(mon);
virObjectUnref(mon);
int fd,
bool hasSendFD,
bool json,
- qemuMonitorCallbacksPtr cb)
+ qemuMonitorCallbacksPtr cb,
+ void *opaque)
{
qemuMonitorPtr mon;
if (json)
mon->waitGreeting = true;
mon->cb = cb;
+ mon->callbackOpaque = opaque;
if (virSetCloseExec(mon->fd) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
qemuMonitorOpen(virDomainObjPtr vm,
virDomainChrSourceDefPtr config,
bool json,
- qemuMonitorCallbacksPtr cb)
+ qemuMonitorCallbacksPtr cb,
+ void *opaque)
{
int fd;
bool hasSendFD = false;
return NULL;
}
- ret = qemuMonitorOpenInternal(vm, fd, hasSendFD, json, cb);
+ ret = qemuMonitorOpenInternal(vm, fd, hasSendFD, json, cb, opaque);
if (!ret)
VIR_FORCE_CLOSE(fd);
return ret;
qemuMonitorPtr qemuMonitorOpenFD(virDomainObjPtr vm,
int sockfd,
bool json,
- qemuMonitorCallbacksPtr cb)
+ qemuMonitorCallbacksPtr cb,
+ void *opaque)
{
- return qemuMonitorOpenInternal(vm, sockfd, true, json, cb);
+ return qemuMonitorOpenInternal(vm, sockfd, true, json, cb, opaque);
}
virObjectRef(mon); \
virObjectUnlock(mon); \
if ((mon)->cb && (mon)->cb->callback) \
- (ret) = ((mon)->cb->callback)(mon, __VA_ARGS__); \
+ (ret) = (mon)->cb->callback(mon, __VA_ARGS__, \
+ (mon)->callbackOpaque); \
virObjectLock(mon); \
virObjectUnref(mon); \
} while (0)
typedef void (*qemuMonitorDestroyCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
/* XXX we'd really like to avoid virConnectPtr here
* It is required so the callback can find the active
* secret driver. Need to change this to work like the
virDomainObjPtr vm,
const char *path,
char **secret,
- size_t *secretLen);
+ size_t *secretLen,
+ void *opaque);
typedef int (*qemuMonitorDomainShutdownCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainResetCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainPowerdownCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainStopCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainResumeCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainRTCChangeCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
- long long offset);
+ long long offset,
+ void *opaque);
typedef int (*qemuMonitorDomainWatchdogCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
- int action);
+ int action,
+ void *opaque);
typedef int (*qemuMonitorDomainIOErrorCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *diskAlias,
int action,
- const char *reason);
+ const char *reason,
+ void *opaque);
typedef int (*qemuMonitorDomainGraphicsCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
int phase,
const char *remoteService,
const char *authScheme,
const char *x509dname,
- const char *saslUsername);
+ const char *saslUsername,
+ void *opaque);
typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *diskAlias,
int type,
- int status);
+ int status,
+ void *opaque);
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *devAlias,
- int reason);
+ int reason,
+ void *opaque);
typedef int (*qemuMonitorDomainPMWakeupCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainPMSuspendCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainBalloonChangeCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
- unsigned long long actual);
+ unsigned long long actual,
+ void *opaque);
typedef int (*qemuMonitorDomainPMSuspendDiskCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainGuestPanicCallback)(qemuMonitorPtr mon,
- virDomainObjPtr vm);
+ virDomainObjPtr vm,
+ void *opaque);
typedef int (*qemuMonitorDomainDeviceDeletedCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
- const char *devAlias);
+ const char *devAlias,
+ void *opaque);
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
virDomainChrSourceDefPtr config,
bool json,
- qemuMonitorCallbacksPtr cb)
+ qemuMonitorCallbacksPtr cb,
+ void *opaque)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
qemuMonitorPtr qemuMonitorOpenFD(virDomainObjPtr vm,
int sockfd,
bool json,
- qemuMonitorCallbacksPtr cb)
+ qemuMonitorCallbacksPtr cb,
+ void *opaque)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
void qemuMonitorClose(qemuMonitorPtr mon);
*/
static void
qemuProcessHandleMonitorEOF(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
qemuDomainObjPrivatePtr priv;
int eventReason = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN;
*/
static void
qemuProcessHandleMonitorError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
VIR_DEBUG("Received error on %p '%s'", vm, vm->def->name);
virDomainObjPtr vm,
const char *path,
char **secretRet,
- size_t *secretLen)
+ size_t *secretLen,
+ void *opaque ATTRIBUTE_UNUSED)
{
virDomainDiskDefPtr disk;
int ret = -1;
static int
qemuProcessHandleReset(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event;
qemuDomainObjPrivatePtr priv;
static int
qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
qemuDomainObjPrivatePtr priv;
virDomainEventPtr event = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandleRTCChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
virDomainObjPtr vm,
- long long offset)
+ long long offset,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
virDomainObjPtr vm,
- int action)
+ int action,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr watchdogEvent = NULL;
virDomainEventPtr lifecycleEvent = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
virDomainObjPtr vm,
const char *diskAlias,
int action,
- const char *reason)
+ const char *reason,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr ioErrorEvent = NULL;
virDomainEventPtr ioErrorEvent2 = NULL;
virDomainEventPtr lifecycleEvent = NULL;
virDomainObjPtr vm,
const char *diskAlias,
int type,
- int status)
+ int status,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
const char *path;
virDomainDiskDefPtr disk;
const char *remoteService,
const char *authScheme,
const char *x509dname,
- const char *saslUsername)
+ const char *saslUsername,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event;
virDomainEventGraphicsAddressPtr localAddr = NULL;
virDomainEventGraphicsAddressPtr remoteAddr = NULL;
static void qemuProcessHandleMonitorDestroy(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque ATTRIBUTE_UNUSED)
{
virObjectUnref(vm);
}
qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
virDomainObjPtr vm,
const char *devAlias,
- int reason)
+ int reason,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virDomainDiskDefPtr disk;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandlePMWakeup(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virDomainEventPtr lifecycleEvent = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virDomainEventPtr lifecycleEvent = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandleBalloonChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
virDomainObjPtr vm,
- unsigned long long actual)
+ unsigned long long actual,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virDomainEventPtr event = NULL;
virDomainEventPtr lifecycleEvent = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
static int
qemuProcessHandleGuestPanic(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm)
+ virDomainObjPtr vm,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
struct qemuProcessEvent *processEvent;
virObjectLock(vm);
static int
qemuProcessHandleDeviceDeleted(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
virDomainObjPtr vm,
- const char *devAlias)
+ const char *devAlias,
+ void *opaque)
{
- virQEMUDriverPtr driver = qemu_driver;
+ virQEMUDriverPtr driver = opaque;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
virDomainDeviceDef dev;
mon = qemuMonitorOpen(vm,
priv->monConfig,
priv->monJSON,
- &monitorCallbacks);
+ &monitorCallbacks,
+ driver);
virObjectLock(vm);
priv->monStart = 0;
static void
qemuMonitorTestEOFNotify(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm ATTRIBUTE_UNUSED)
+ virDomainObjPtr vm ATTRIBUTE_UNUSED,
+ void *opaque ATTRIBUTE_UNUSED)
{
}
static void
qemuMonitorTestErrorNotify(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
- virDomainObjPtr vm ATTRIBUTE_UNUSED)
+ virDomainObjPtr vm ATTRIBUTE_UNUSED,
+ void *opaque ATTRIBUTE_UNUSED)
{
}
if (!(test->mon = qemuMonitorOpen(test->vm,
&src,
json,
- &qemuMonitorTestCallbacks)))
+ &qemuMonitorTestCallbacks,
+ NULL)))
goto error;
virObjectLock(test->mon);