[Libvirt-cim] [PATCH 2/3] CSI: Use list helper implementation
Sharad Mishra
snmishra at linux.vnet.ibm.com
Thu Feb 2 18:39:14 UTC 2012
+1
run cimtest before pushing
-Sharad
On Tue, 2012-01-31 at 19:58 -0200, Eduardo Lima (Etrunko) wrote:
> From: "Eduardo Lima (Etrunko)" <eblima at br.ibm.com>
>
> Signed-off-by: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
> ---
> src/Virt_ComputerSystemIndication.c | 95 ++++++++++-------------------------
> 1 files changed, 26 insertions(+), 69 deletions(-)
>
> diff --git a/src/Virt_ComputerSystemIndication.c b/src/Virt_ComputerSystemIndication.c
> index 6ef2ddc..712e12c 100644
> --- a/src/Virt_ComputerSystemIndication.c
> +++ b/src/Virt_ComputerSystemIndication.c
> @@ -19,6 +19,10 @@
> * License along with this library; if not, write to the Free Software
> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> */
> +#ifdef HAVE_CONFIG_H
> +# include "config.h"
> +#endif
> +
> #include <unistd.h>
> #include <stdio.h>
> #include <fcntl.h>
> @@ -34,11 +38,11 @@
> #include <libvirt/virterror.h>
>
> #include <libcmpiutil/libcmpiutil.h>
> -#include <misc_util.h>
> #include <libcmpiutil/std_indication.h>
> -#include <cs_util.h>
>
> -#include "config.h"
> +#include <misc_util.h>
> +#include <cs_util.h>
> +#include <list_util.h>
>
> #include "Virt_ComputerSystem.h"
> #include "Virt_ComputerSystemIndication.h"
> @@ -64,8 +68,6 @@ struct _csi_dom_xml_t {
> char uuid[VIR_UUID_STRING_BUFLEN];
> char *name;
> char *xml;
> - csi_dom_xml_t *next;
> - csi_dom_xml_t *prev;
> };
>
> typedef struct _csi_thread_data_t csi_thread_data_t;
> @@ -73,7 +75,7 @@ struct _csi_thread_data_t {
> CMPI_THREAD_TYPE id;
> int active_filters;
> int dom_count;
> - csi_dom_xml_t *dom_list;
> + list_t *dom_list;
> struct ind_args *args;
> };
>
> @@ -83,15 +85,24 @@ static bool lifecycle_enabled = false;
> static csi_thread_data_t csi_thread_data[CSI_NUM_PLATFORMS] = {{0}, {0}, {0}};
>
> /*
> - * Domain list manipulation
> + * Domain manipulation
> */
> -static void csi_dom_xml_free(csi_dom_xml_t *dom)
> +static void csi_dom_xml_free(void *data)
> {
> + csi_dom_xml_t *dom = (csi_dom_xml_t *) data;
> free(dom->xml);
> free(dom->name);
> free(dom);
> }
>
> +static int csi_dom_xml_cmp(void *data, void *cmp_cb_data)
> +{
> + csi_dom_xml_t *dom = (csi_dom_xml_t *) data;
> + const char *uuid = (const char *) cmp_cb_data;
> +
> + return strcmp(dom->uuid, uuid);
> +}
> +
> static int csi_dom_xml_set(csi_dom_xml_t *dom, virDomainPtr dom_ptr, CMPIStatus *s)
> {
> const char *name;
> @@ -150,65 +161,10 @@ static csi_dom_xml_t *csi_dom_xml_new(virDomainPtr dom_ptr, CMPIStatus *s)
> static void csi_thread_dom_list_append(csi_thread_data_t *thread,
> csi_dom_xml_t *dom)
> {
> - /* empty list */
> - if (thread->dom_list == NULL) {
> - dom->next = dom->prev = dom;
> - thread->dom_list = dom;
> - goto end;
> - }
> -
> - dom->next = thread->dom_list;
> - dom->prev = thread->dom_list->prev;
> -
> - thread->dom_list->prev->next = dom;
> - thread->dom_list->prev = dom;
> -
> - end:
> - thread->dom_count += 1;
> -}
> -
> -static csi_dom_xml_t *csi_thread_dom_list_find(csi_thread_data_t *thread,
> - const char *uuid)
> -{
> - csi_dom_xml_t *dom;
> -
> if (thread->dom_list == NULL)
> - return NULL;
> -
> - dom = thread->dom_list;
> -
> - do {
> - if (STREQ(dom->uuid, uuid))
> - return dom;
> -
> - dom = dom->next;
> - } while (dom != thread->dom_list);
> + thread->dom_list = list_new(csi_dom_xml_free, csi_dom_xml_cmp);
>
> - return NULL;
> -}
> -
> -static void csi_thread_dom_list_remove(csi_thread_data_t *thread,
> - csi_dom_xml_t *dom)
> -{
> - if (dom->next == dom) { /* Only one node */
> - thread->dom_list = NULL;
> - } else {
> - if (thread->dom_list == dom) /* First node */
> - thread->dom_list = dom->next;
> -
> - dom->prev->next = dom->next;
> - dom->next->prev = dom->prev;
> - }
> -
> - thread->dom_count -= 1;
> -
> - csi_dom_xml_free(dom);
> -}
> -
> -static void csi_thread_dom_list_free(csi_thread_data_t *thread)
> -{
> - while(thread->dom_list != NULL)
> - csi_thread_dom_list_remove(thread, thread->dom_list);
> + list_append(thread->dom_list, dom);
> }
>
> static void csi_free_thread_data(void *data)
> @@ -218,7 +174,8 @@ static void csi_free_thread_data(void *data)
> if (data == NULL)
> return;
>
> - csi_thread_dom_list_free(thread);
> + list_free(thread->dom_list);
> + thread->dom_list = NULL;
> stdi_free_ind_args(&thread->args);
> }
>
> @@ -512,7 +469,7 @@ static int update_domain_list(virConnectPtr conn, csi_thread_data_t *thread)
> CMPIStatus s = {CMPI_RC_OK, NULL};
> int i, count;
>
> - csi_thread_dom_list_free(thread);
> + list_free(thread->dom_list);
>
> count = get_domain_list(conn, &dom_ptr_list);
>
> @@ -574,7 +531,7 @@ static int csi_domain_event_cb(virConnectPtr conn,
> if (cs_event != CS_CREATED) {
> char uuid[VIR_UUID_STRING_BUFLEN] = {0};
> virDomainGetUUIDString(dom, &uuid[0]);
> - dom_xml = csi_thread_dom_list_find(thread, uuid);
> + dom_xml = list_find(thread->dom_list, uuid);
> }
>
> if (dom_xml == NULL) {
> @@ -595,7 +552,7 @@ static int csi_domain_event_cb(virConnectPtr conn,
> }
> } else if (event == VIR_DOMAIN_EVENT_DEFINED &&
> detail == VIR_DOMAIN_EVENT_UNDEFINED_REMOVED) {
> - csi_thread_dom_list_remove(thread, dom_xml);
> + list_remove(thread->dom_list, dom_xml);
> }
>
> end:
More information about the Libvirt-cim
mailing list