/*
* libxl_conf.h: libxl configuration management
*
- * Copyright (C) 2011-2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+ * Copyright (C) 2011-2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
* Copyright (C) 2011 Univention GmbH.
*
* This library is free software; you can redistribute it and/or
virSysinfoDefPtr hostsysinfo;
};
-typedef struct _libxlEventHookInfo libxlEventHookInfo;
-typedef libxlEventHookInfo *libxlEventHookInfoPtr;
-
# define LIBXL_SAVE_MAGIC "libvirt-xml\n \0 \r"
# define LIBXL_SAVE_VERSION 1
#define VIR_FROM_THIS VIR_FROM_LIBXL
-/* Append an event registration to the list of registrations */
-#define LIBXL_EV_REG_APPEND(head, add) \
- do { \
- libxlEventHookInfoPtr temp; \
- if (head) { \
- temp = head; \
- while (temp->next) \
- temp = temp->next; \
- temp->next = add; \
- } else { \
- head = add; \
- } \
- } while (0)
-
-/* Remove an event registration from the list of registrations */
-#define LIBXL_EV_REG_REMOVE(head, del) \
- do { \
- libxlEventHookInfoPtr temp; \
- if (head == del) { \
- head = head->next; \
- } else { \
- temp = head; \
- while (temp->next && temp->next != del) \
- temp = temp->next; \
- if (temp->next) { \
- temp->next = del->next; \
- } \
- } \
- } while (0)
-
/* Object used to store info related to libxl event registrations */
+typedef struct _libxlEventHookInfo libxlEventHookInfo;
+typedef libxlEventHookInfo *libxlEventHookInfoPtr;
struct _libxlEventHookInfo {
libxlEventHookInfoPtr next;
libxlDomainObjPrivatePtr priv;
virObjectUnlock(p);
libxl_osevent_occurred_timeout(p->ctx, info->xl_priv);
virObjectLock(p);
- /*
- * Timeout could have been freed while the lock was dropped.
- * Only remove it from the list if it still exists.
- */
- if (virEventRemoveTimeout(info->id) == 0)
- LIBXL_EV_REG_REMOVE(p->timerRegistrations, info);
+ virEventRemoveTimeout(info->id);
virObjectUnlock(p);
}
return -1;
}
- virObjectLock(info->priv);
- LIBXL_EV_REG_APPEND(info->priv->timerRegistrations, info);
- virObjectUnlock(info->priv);
*hndp = info;
return 0;
libxlDomainObjPrivatePtr p = info->priv;
virObjectLock(p);
- /*
- * Only remove the timeout from the list if removal from the
- * event loop is successful.
- */
- if (virEventRemoveTimeout(info->id) == 0)
- LIBXL_EV_REG_REMOVE(p->timerRegistrations, info);
+ virEventRemoveTimeout(info->id);
virObjectUnlock(p);
}
VIR_FREE(log_file);
return ret;
}
-
-void
-libxlDomainObjRegisteredTimeoutsCleanup(libxlDomainObjPrivatePtr priv)
-{
- libxlEventHookInfoPtr info;
-
- virObjectLock(priv);
- info = priv->timerRegistrations;
- while (info) {
- /*
- * libxl expects the event to be deregistered when calling
- * libxl_osevent_occurred_timeout, but we dont want the event info
- * destroyed. Disable the timeout and only remove it after returning
- * from libxl.
- */
- virEventUpdateTimeout(info->id, -1);
- libxl_osevent_occurred_timeout(priv->ctx, info->xl_priv);
- virEventRemoveTimeout(info->id);
- info = info->next;
- }
- priv->timerRegistrations = NULL;
- virObjectUnlock(priv);
-}
/*
* libxl_domain.h: libxl domain object private state
*
- * Copyright (C) 2011-2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+ * Copyright (C) 2011-2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
/* console */
virChrdevsPtr devs;
libxl_evgen_domain_death *deathW;
-
- /* list of libxl timeout registrations */
- libxlEventHookInfoPtr timerRegistrations;
};
int
libxlDomainObjPrivateInitCtx(virDomainObjPtr vm);
-void
-libxlDomainObjRegisteredTimeoutsCleanup(libxlDomainObjPrivatePtr priv);
-
#endif /* LIBXL_DOMAIN_H */
* libxl_driver.c: core driver methods for managing libxenlight domains
*
* Copyright (C) 2006-2014 Red Hat, Inc.
- * Copyright (C) 2011-2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+ * Copyright (C) 2011-2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
* Copyright (C) 2011 Univention GmbH.
*
* This library is free software; you can redistribute it and/or
vm->newDef = NULL;
}
- libxlDomainObjRegisteredTimeoutsCleanup(priv);
virObjectUnref(cfg);
}