From: Tom Tromey <tromey@adacore.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tromey@adacore.com>
Subject: [PATCH v2] Ensure index cache entry written in test
Date: Mon, 6 Mar 2023 09:45:53 -0700 [thread overview]
Message-ID: <20230306164553.1449009-1-tromey@adacore.com> (raw)
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.
---
gdb/NEWS | 3 +++
gdb/doc/gdb.texinfo | 6 ++++++
gdb/dwarf2/cooked-index.c | 15 +++++++++++++++
gdb/testsuite/gdb.base/index-cache.exp | 2 ++
4 files changed, 26 insertions(+)
diff --git a/gdb/NEWS b/gdb/NEWS
index c32ff92c98a..8827efaefb6 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 bfda7edc4f7..954f1481dae 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 47746aa9905..d09faed268d 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 0614d4ee2db..7fdf90c2c24 100644
--- a/gdb/testsuite/gdb.base/index-cache.exp
+++ b/gdb/testsuite/gdb.base/index-cache.exp
@@ -159,6 +159,8 @@ proc_with_prefix test_cache_enabled_miss { cache_dir } {
run_test_with_flags $cache_dir on {
+ gdb_test_no_output "maintenance wait-for-index-cache"
+
lassign [ls_host $cache_dir] ret files_after
set nfiles_created [expr [llength $files_after] - [llength $files_before]]
if { $expecting_index_cache_use } {
--
2.39.1
next reply other threads:[~2023-03-06 16:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-06 16:45 Tom Tromey [this message]
2023-03-06 17:59 ` Simon Marchi
2023-03-07 14:58 ` Tom Tromey
2023-03-07 17:21 ` Simon Marchi
2023-03-07 18:25 ` Tom Tromey
2023-03-09 1:58 ` Simon Marchi
2023-03-24 22:25 ` Tom Tromey
2023-03-06 18:24 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230306164553.1449009-1-tromey@adacore.com \
--to=tromey@adacore.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).