[Libguestfs] [nbdkit PATCH 2/4] threadlocal: Copy thread name

Richard W.M. Jones rjones at redhat.com
Fri Nov 17 22:53:31 UTC 2017


On Fri, Nov 17, 2017 at 02:21:58PM -0600, Eric Blake wrote:
> On 11/16/2017 09:13 PM, Eric Blake wrote:
> > We can't guarantee what storage duration the caller's request
> > for a thread name has; and in fact, if the caller uses
> > plugin_name() for their thread name, then the moment .unload
> > is called, our threadlocal storage is pointing to la-la-land
> > and we get a nice SEGV while trying to print any debug message.
> > So copy the user's string instead.
> > 
> > Signed-off-by: Eric Blake <eblake at redhat.com>
> > ---
> >  src/threadlocal.c | 17 +++++++++++++----
> >  1 file changed, 13 insertions(+), 4 deletions(-)
> > 
> 
> > @@ -104,8 +105,16 @@ threadlocal_set_name (const char *name)
> >  {
> >    struct threadlocal *threadlocal = pthread_getspecific (threadlocal_key);
> > 
> > -  if (threadlocal)
> > -    threadlocal->name = name;
> > +  /* Copy name, as the original may be residing in a module, but we
> > +   * want our thread name to persist even after unload. */
> > +  if (threadlocal) {
> > +    free (threadlocal->name);
> > +    threadlocal->name = strdup (name);
> > +    if (threadlocal->name == NULL) {
> > +      perror ("malloc");
> > +      exit (EXIT_FAILURE);
> > +    }
> 
> I'm thinking (especially since I plan to create threads for each
> connection) that an exit() may be a bit harsh here (exit during startup
> is fine; but this code can be reached on more than just startup, and
> once we transition into accepting connections, we should make reasonable
> efforts to avoid killing off existing connections with an exit).  Thus,
> I'm tweaking this function to just state that it is best-effort; if
> strdup() fails, we're better off printing debug messages without a name
> at all than we are exit()ing. (Then again, if strdup() fails, most
> likely something else will fail soon anyways).

Yes, this sounds like a good plan.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW




More information about the Libguestfs mailing list