Follow up from my previous comments...
I think the problem is related to the use of virEventRegisterDefaultImpl() in
libvirt_cim_init(), which is called by all providers, not just indication
providers. Given the number of times we call that function, perhaps we're
overloading libvirt and/or triggering an underlying bug. When I either comment
out that function, I see no crashes. I then moved it to be called once in
ComputerSystemIndication->ActivateFilter() (via a static init variable), and I
was able to avoid the crashes. Unfortunately, I'm not able to verify the domain
events function via cimtest. FWIW, I see the same message w/o the patch so
perhaps I need to do something else to make it work.
ComputerSystemIndication - 01_created_indication.py: FAIL
ERROR - Waited too long for define indication
ERROR - Exception: Poll for indication Failed
ERROR - Waited too long for start indication
ERROR - Exception: Poll for indication Failed
ERROR - Waited too long for destroy indication
ERROR - Exception: Poll for indication Failed
Here's a quick peek at the changes I made for reference:
Remove virEventRegisterDefaultImpl() from init functon
diff --git a/libxkutil/misc_util.c b/libxkutil/misc_util.c
index 556fe1f..61893c3 100644
--- a/libxkutil/misc_util.c
+++ b/libxkutil/misc_util.c
@@ -607,8 +607,6 @@ bool libvirt_cim_init(void)
ret = virInitialize();
if (ret == 0)
libvirt_initialized = 1;
-
- virEventRegisterDefaultImpl();
}
pthread_mutex_unlock(&libvirt_mutex);
}
Initialize entire csi_thread_data_t structures. Not sure if a single '{0}' sets
*all* members to 0 and
I wanted to be sure the active_filters member was set to 0 before
incrementing/decrementing.
Also added one time call to virEventRegisterDefaultImpl() to ActiveFilter().
diff --git a/src/Virt_ComputerSystemIndication.c
b/src/Virt_ComputerSystemIndication.c
index 0df73f3..1ea8520 100644
--- a/src/Virt_ComputerSystemIndication.c
+++ b/src/Virt_ComputerSystemIndication.c
@@ -80,7 +80,10 @@ struct _csi_thread_data_t {
static const CMPIBroker *_BROKER;
static pthread_mutex_t lifecycle_mutex = PTHREAD_MUTEX_INITIALIZER;
static bool lifecycle_enabled = false;
-static csi_thread_data_t csi_thread_data[CSI_NUM_PLATFORMS] = {{0}, {0}, {0}};
+static csi_thread_data_t csi_thread_data[CSI_NUM_PLATFORMS] =
+ {{0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0}};
/*
* Domain list manipulation
@@ -698,6 +703,13 @@ static CMPIStatus ActivateFilter(CMPIIndicationMI* mi,
bool error = false;
csi_thread_data_t *thread = NULL;
+ static int _init = 0;
+
+ if(_init == 0) {
+ _init = 1;
+ virEventRegisterDefaultImpl();
+ }
+
CU_DEBUG("ActivateFilter for %s", CLASSNAME(op));
pthread_mutex_lock(&lifecycle_mutex);
--
Chip Vincent
Open Virtualization
IBM Linux Technology Center
cvincent(a)linux.vnet.ibm.com