On 12/30/2011 10:26 PM, Chip Vincent wrote:
It appears there is a bug causing a crash somewhere between
virConnectDomainEventRegisterAny() and here. Disabling this
section of code avoids the crashes I mentioned
(
https://www.redhat.com/archives/libvirt-cim/2011-December/msg00086.html).
Of course, that effectively disables much more code... baby steps.
NOTE: I have yet to get a meaningful backtrace, which suggests some
memory or stack corruption and the functions in the backtrace are likely a
victim. I'm looking at the list handling code now.
Threads, threads... :/
> - fail:
> - if (failure) {
> - wait_for_event(FAIL_WAIT_TIME);
> - } else {
> - free(prev_xml);
> - prev_xml = cur_xml;
> - prev_count = cur_count;
>
> - wait_for_event(WAIT_TIME);
> + CU_DEBUG("Entering CSI event loop (%s)", prefix);
> + while (thread->active_filters> 0) {
> + if (virEventRunDefaultImpl()< 0) {
> + virErrorPtr err = virGetLastError();
> + CU_DEBUG("Failed to run event loop: %s\n",
> + err&& err->message ? err->message :
"Unknown
> error");
> }
> }
I believe you need to call CBDetachThread() here so that CMPI can clean-up
objects created during the thread's lifecycle. Otherwise, it will appear
like
a leak since the CIMOM and Indication Providers run indefinitely.
Thanks for the insight. I felt that this call to CBDetachThread was
missing at first, but the original implementation did not include it so
I left it behind.
--
Eduardo de Barros Lima
Software Engineer, Open Virtualization
Linux Technology Center - IBM/Brazil
eblima(a)br.ibm.com