[libvirt] [PATCH] Include a thread identifier in log messages
Daniel P. Berrange
berrange at redhat.com
Tue Nov 23 10:21:24 UTC 2010
On Mon, Nov 22, 2010 at 11:44:42AM -0700, Eric Blake wrote:
> On 11/22/2010 07:10 AM, Daniel P. Berrange wrote:
> > To allow messages from different threads to be untangled,
> > include an integer thread identifier in log messages.
> >
> > * src/util/logging.c: Include thread ID
> > * src/util/threads.h, src/util/threads.h, src/util/threads-pthread.c:
> > Add new virThreadSelfID() function
> > * configure.ac: Check for sys/syscall.h
>
> >
> > +int virThreadSelfID(void)
> > +{
> > +#if defined(HAVE_SYS_SYSCALL_H) && defined(SYS_gettid)
> > + pid_t tid;
> > + tid = syscall(SYS_gettid);
> > + return (int)tid;
>
> Bummer that glibc doesn't export gettid(), but this looks correct to me
> for Linux.
>
> > +#else
> > + return (int)pthread_self();
>
> According to POSIX, this is not portable: pthread_t is an opaque type
> and is allowed to be a struct rather than an arithmetic type, in which
> case casting to int will cause a compilation failure. But in practice:
> pthread_t is integral on Linux, Solaris, and AIX; and a pointer type on
> BSD and Cygwin; therefore, the cast will probably succeed on all
> architectures we might encounter, but it still might not be correct
> (that is, since pthread_equal() is allowed to return true for two
> distinct pointers, merely casting a pointer to int may give different
> ids for the same thread).
>
> But I'm okay waiting for an actual bug report of this failing to do the
> right thing before we change this code.
Agreed, given that this is only used for outputing a log message,
I don't think the potential problems are worth worrying about at
this point in time.
Daniel
More information about the libvir-list
mailing list