提交 6ac7cc8e 编写于 作者: J Jiri Denemark

qemu: Typedef monitor callbacks

Otherwise defining variables that hold callbacks pointers is ugly and
several places have to be changed when new parameters are added.
上级 784cca89
...@@ -660,8 +660,7 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) { ...@@ -660,8 +660,7 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) {
* but is this safe ? I think it is, because the callback * but is this safe ? I think it is, because the callback
* will try to acquire the virDomainObjPtr mutex next */ * will try to acquire the virDomainObjPtr mutex next */
if (eof) { if (eof) {
void (*eofNotify)(qemuMonitorPtr, virDomainObjPtr) qemuMonitorEofNotifyCallback eofNotify = mon->cb->eofNotify;
= mon->cb->eofNotify;
virDomainObjPtr vm = mon->vm; virDomainObjPtr vm = mon->vm;
/* Make sure anyone waiting wakes up now */ /* Make sure anyone waiting wakes up now */
...@@ -671,8 +670,7 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) { ...@@ -671,8 +670,7 @@ qemuMonitorIO(int watch, int fd, int events, void *opaque) {
VIR_DEBUG("Triggering EOF callback"); VIR_DEBUG("Triggering EOF callback");
(eofNotify)(mon, vm); (eofNotify)(mon, vm);
} else if (error) { } else if (error) {
void (*errorNotify)(qemuMonitorPtr, virDomainObjPtr) qemuMonitorErrorNotifyCallback errorNotify = mon->cb->errorNotify;
= mon->cb->errorNotify;
virDomainObjPtr vm = mon->vm; virDomainObjPtr vm = mon->vm;
/* Make sure anyone waiting wakes up now */ /* Make sure anyone waiting wakes up now */
......
...@@ -67,84 +67,105 @@ struct _qemuMonitorMessage { ...@@ -67,84 +67,105 @@ struct _qemuMonitorMessage {
void *passwordOpaque; void *passwordOpaque;
}; };
typedef void (*qemuMonitorDestroyCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
/* 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
* security drivers do, to avoid this
*/
typedef int (*qemuMonitorDiskSecretLookupCallback)(qemuMonitorPtr mon,
virConnectPtr conn,
virDomainObjPtr vm,
const char *path,
char **secret,
size_t *secretLen);
typedef int (*qemuMonitorDomainShutdownCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainResetCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainPowerdownCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainStopCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainResumeCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainRTCChangeCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
long long offset);
typedef int (*qemuMonitorDomainWatchdogCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
int action);
typedef int (*qemuMonitorDomainIOErrorCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *diskAlias,
int action,
const char *reason);
typedef int (*qemuMonitorDomainGraphicsCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
int phase,
int localFamily,
const char *localNode,
const char *localService,
int remoteFamily,
const char *remoteNode,
const char *remoteService,
const char *authScheme,
const char *x509dname,
const char *saslUsername);
typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *diskAlias,
int type,
int status);
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *devAlias,
int reason);
typedef int (*qemuMonitorDomainPMWakeupCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainPMSuspendCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainBalloonChangeCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
unsigned long long actual);
typedef int (*qemuMonitorDomainPMSuspendDiskCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainGuestPanicCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm);
typedef int (*qemuMonitorDomainDeviceDeletedCallback)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *devAlias);
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks; typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr; typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks { struct _qemuMonitorCallbacks {
void (*destroy)(qemuMonitorPtr mon, qemuMonitorDestroyCallback destroy;
virDomainObjPtr vm); qemuMonitorEofNotifyCallback eofNotify;
qemuMonitorErrorNotifyCallback errorNotify;
void (*eofNotify)(qemuMonitorPtr mon, qemuMonitorDiskSecretLookupCallback diskSecretLookup;
virDomainObjPtr vm); qemuMonitorDomainShutdownCallback domainShutdown;
void (*errorNotify)(qemuMonitorPtr mon, qemuMonitorDomainResetCallback domainReset;
virDomainObjPtr vm); qemuMonitorDomainPowerdownCallback domainPowerdown;
/* XXX we'd really like to avoid virConnectPtr here qemuMonitorDomainStopCallback domainStop;
* It is required so the callback can find the active qemuMonitorDomainResumeCallback domainResume;
* secret driver. Need to change this to work like the qemuMonitorDomainRTCChangeCallback domainRTCChange;
* security drivers do, to avoid this qemuMonitorDomainWatchdogCallback domainWatchdog;
*/ qemuMonitorDomainIOErrorCallback domainIOError;
int (*diskSecretLookup)(qemuMonitorPtr mon, qemuMonitorDomainGraphicsCallback domainGraphics;
virConnectPtr conn, qemuMonitorDomainBlockJobCallback domainBlockJob;
virDomainObjPtr vm, qemuMonitorDomainTrayChangeCallback domainTrayChange;
const char *path, qemuMonitorDomainPMWakeupCallback domainPMWakeup;
char **secret, qemuMonitorDomainPMSuspendCallback domainPMSuspend;
size_t *secretLen); qemuMonitorDomainBalloonChangeCallback domainBalloonChange;
qemuMonitorDomainPMSuspendDiskCallback domainPMSuspendDisk;
int (*domainShutdown)(qemuMonitorPtr mon, qemuMonitorDomainGuestPanicCallback domainGuestPanic;
virDomainObjPtr vm); qemuMonitorDomainDeviceDeletedCallback domainDeviceDeleted;
int (*domainReset)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainPowerdown)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainStop)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainResume)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainRTCChange)(qemuMonitorPtr mon,
virDomainObjPtr vm,
long long offset);
int (*domainWatchdog)(qemuMonitorPtr mon,
virDomainObjPtr vm,
int action);
int (*domainIOError)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *diskAlias,
int action,
const char *reason);
int (*domainGraphics)(qemuMonitorPtr mon,
virDomainObjPtr vm,
int phase,
int localFamily,
const char *localNode,
const char *localService,
int remoteFamily,
const char *remoteNode,
const char *remoteService,
const char *authScheme,
const char *x509dname,
const char *saslUsername);
int (*domainBlockJob)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *diskAlias,
int type,
int status);
int (*domainTrayChange)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *devAlias,
int reason);
int (*domainPMWakeup)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainPMSuspend)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainBalloonChange)(qemuMonitorPtr mon,
virDomainObjPtr vm,
unsigned long long actual);
int (*domainPMSuspendDisk)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainGuestPanic)(qemuMonitorPtr mon,
virDomainObjPtr vm);
int (*domainDeviceDeleted)(qemuMonitorPtr mon,
virDomainObjPtr vm,
const char *devAlias);
}; };
char *qemuMonitorEscapeArg(const char *in); char *qemuMonitorEscapeArg(const char *in);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册