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>
This commit is contained in:
parent
e9f59c6f6c
commit
f0c3dcc1ca
3
gdb/NEWS
3
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
|
||||
|
@ -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}
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user