
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@br.ibm.com