[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