debuginfod: correct concurrency bug in fdcache metrics
authorFrank Ch. Eigler <fche@redhat.com>
Wed, 8 Dec 2021 15:20:58 +0000 (10:20 -0500)
committerFrank Ch. Eigler <fche@redhat.com>
Wed, 8 Dec 2021 15:20:58 +0000 (10:20 -0500)
The intern() function called set_metrics() outside a necessary lock
being held.  helgrind identified this race condition.  No QA impact.

Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
debuginfod/ChangeLog
debuginfod/debuginfod.cxx

index 8c937d6..8cbaa9a 100644 (file)
@@ -1,3 +1,7 @@
+2021-12-08  Frank Ch. Eigler  <fche@redhat.com>
+
+       * debuginfod.cxx (intern): Call set_metrics() holding the fdcache mutex.
+
 2021-12-04  Mark Wielaard  <mark@klomp.org>
 
        * debuginfod-client.c (debuginfod_query_server): Free winning_headers.
index 0d3f029..a26e7e8 100644 (file)
@@ -1354,8 +1354,8 @@ public:
       if (verbose > 3)
         obatched(clog) << "fdcache interned a=" << a << " b=" << b
                        << " fd=" << fd << " mb=" << mb << " front=" << front_p << endl;
+      set_metrics();
     }
-    set_metrics();
 
     // NB: we age the cache at lookup time too
     if (statfs_free_enough_p(tmpdir, "tmpdir", fdcache_mintmp))