aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2023-03-03 09:41:35 -0700
committerTom Tromey <tromey@adacore.com>2023-03-07 07:58:30 -0700
commitf0c3dcc1ca714cb17602f4c12c00b3604f36b035 (patch)
treeb70a41eefe31b11bce3893b748b03917b127581e /gdb
parente9f59c6f6c02242c272171e28dd6dfec2fcf7a1c (diff)
downloadgdb-f0c3dcc1ca714cb17602f4c12c00b3604f36b035.zip
gdb-f0c3dcc1ca714cb17602f4c12c00b3604f36b035.tar.gz
gdb-f0c3dcc1ca714cb17602f4c12c00b3604f36b035.tar.bz2
Ensure index cache entry written in test
Now that index cache files are written in the background, one test in index-cache.exp is racy -- it assumes that the cache file will have been written during startup. This patch fixes the problem by introducing a new maintenance command to wait for all pending writes to the index cache. Approved-By: Simon Marchi <simon.marchi@efficios.com> Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/NEWS3
-rw-r--r--gdb/doc/gdb.texinfo6
-rw-r--r--gdb/dwarf2/cooked-index.c15
-rw-r--r--gdb/testsuite/gdb.base/index-cache.exp8
4 files changed, 31 insertions, 1 deletions
diff --git a/gdb/NEWS b/gdb/NEWS
index c32ff92..8827efa 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -68,6 +68,9 @@ maintenance info frame-unwinders
List the frame unwinders currently in effect, starting with the highest
priority.
+maintenance wait-for-index-cache
+ Wait until all pending writes to the index cache have completed.
+
set always-read-ctf on|off
show always-read-ctf
When off, CTF is only read if DWARF is not present. When on, CTF is
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index bfda7ed..954f148 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -41374,6 +41374,12 @@ give an error.
For platforms that do support creating the backtrace this feature is
@code{on} by default.
+@kindex maint wait-for-index-cache
+@item maint wait-for-index-cache
+Wait until all pending writes to the index cache have completed. This
+is used by the test suite to avoid races when the index cache is being
+updated by a worker thread.
+
@kindex maint with
@item maint with @var{setting} [@var{value}] [-- @var{command}]
Like the @code{with} command, but works with @code{maintenance set}
diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c
index 47746aa..d09faed 100644
--- a/gdb/dwarf2/cooked-index.c
+++ b/gdb/dwarf2/cooked-index.c
@@ -33,6 +33,7 @@
#include "gdbsupport/selftest.h"
#include <chrono>
#include <unordered_set>
+#include "cli/cli-cmds.h"
/* We don't want gdb to exit while it is in the process of writing to
the index cache. So, all live cooked index vectors are stored
@@ -640,6 +641,14 @@ wait_for_index_cache (int)
item->wait_completely ();
}
+/* A maint command to wait for the cache. */
+
+static void
+maintenance_wait_for_index_cache (const char *args, int from_tty)
+{
+ wait_for_index_cache (0);
+}
+
void _initialize_cooked_index ();
void
_initialize_cooked_index ()
@@ -648,5 +657,11 @@ _initialize_cooked_index ()
selftests::register_test ("cooked_index_entry::compare", test_compare);
#endif
+ add_cmd ("wait-for-index-cache", class_maintenance,
+ maintenance_wait_for_index_cache, _("\
+Usage: maintenance wait-for-index-cache\n\
+Wait until all pending writes to the index cache have completed."),
+ &maintenancelist);
+
gdb::observers::gdb_exiting.attach (wait_for_index_cache, "cooked-index");
}
diff --git a/gdb/testsuite/gdb.base/index-cache.exp b/gdb/testsuite/gdb.base/index-cache.exp
index 0614d4e..ec69f0f 100644
--- a/gdb/testsuite/gdb.base/index-cache.exp
+++ b/gdb/testsuite/gdb.base/index-cache.exp
@@ -84,6 +84,10 @@ proc run_test_with_flags { cache_dir cache_enabled code } {
clean_restart ${testfile}
+ # The tests generally want to check the cache, so make sure it
+ # has completed its work.
+ gdb_test_no_output "maintenance wait-for-index-cache"
+
uplevel 1 $code
}
}
@@ -201,7 +205,9 @@ proc_with_prefix test_cache_enabled_hit { cache_dir } {
global expecting_index_cache_use
# Just to populate the cache.
- run_test_with_flags $cache_dir on {}
+ with_test_prefix "populate cache" {
+ run_test_with_flags $cache_dir on {}
+ }
lassign [ls_host $cache_dir] ret files_before