On Thu, Oct 22, 2015 at 03:23:49PM +0200, Jiri Denemark wrote: > On Thu, Oct 22, 2015 at 13:52:29 +0100, Daniel P. Berrange wrote: > ... > > On a related topic, we don't have great error reporting in the (usually > > unlikely) scenario that we get a stuck job / timeout. I've long thought > > it could be desirable to record some metadata when we start jobs, such > > as the __FUNC__ of the method which started the job, so when we report > > an error we can include that info as a diagnostic aid. > > Do you mean something like > > virsh # resume cd > error: Failed to resume domain cd > error: Timed out during operation: cannot acquire state change lock > (held by remoteDispatchDomainSuspend) > > This was implemented by v1.2.13-295-gb79f25e > > > This would > > have to be against the qemuDomainObjPrivPtr struct. THis makes me > > think that using the separate bool inJob/inMonitor stack variables > > is not required. > > > > We could just add > > > > int threadid; > > bool inJob; > > bool inMonitor; > > const char *jobfunc; > > > > to qemuDomainObjPrivPtr. That way you don't need to modify the > > Enter/Exit functions to add extra arguments - we just track > > everything internally. When exiting, we'd compare against the > > threadid, to make sure we don't accidentally relaase a different > > thread's job. > > Yeah, as long as we can make sure threadid is unique and stable: > > /* These next two functions are for debugging only, since they are not > * guaranteed to give unique values for distinct threads on all > * architectures, nor are the two functions guaranteed to give the same > * value for the same thread. */ > unsigned long long virThreadSelfID(void); > unsigned long long virThreadID(virThreadPtr thread); > > so far we avoided using thread IDs for anything critical. So technically that comment is correct, since we're casting the pthread_t type to an unsigned long long, also you cannot directly compare pthread_t == pthread_t. POSIX does however provide pthread_equal() to allow you to compare whether 2 pthread_t values point to the same thread. http://man7.org/linux/man-pages/man3/pthread_self.3.html http://man7.org/linux/man-pages/man3/pthread_equal.3.html Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list