On 02/23/2018 04:05 PM, Laine Stump wrote: > A problem encountered due to a bug in libpcap was reported to the caller as: > > An error occurred, but the cause is unknown > > This was because the error had been logged in the DHCPSnoop > thread. The worker thread handling the API call to start a domain > spins up the DHCPSnoop thread which watches for dhcp packets with > libpcap, then uses virCondSignal() to notify the worker thread (which > has been waiting with virCondWait()). The worker thread knows that > there was an error (because threadStatus != THREAD_STATUS_OK), but the > error info had been stored in thread-specific storage for the other > thread, so the worker thread can only report that there was a failure, > but it doesn't know why. > > The solution is to save the error that was logged (with > virErrorPreserveLast() into the object the is used to share info > between the threads, then we can set the error in the worker thread > using virErrorRestore(). > > In the case of the error I was looking at, this changed the "unknown" > message into: > > internal error: pcap_setfilter: can't remove kernel filter: > Bad file descriptor > > Signed-off-by: Laine Stump <laine@xxxxxxxxx> > --- > src/nwfilter/nwfilter_dhcpsnoop.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) ACK and safe for freeze. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list