From: Pedro Alves <palves@redhat.com>
To: Andrew Burgess <andrew.burgess@embecosm.com>,
Tom de Vries <tdevries@suse.de>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 3/3][gdb/testsuite] Warn about leaked global array
Date: Wed, 3 Jun 2020 10:49:37 +0100 [thread overview]
Message-ID: <72b3c10c-d316-9a0e-13e9-56dee7c765a7@redhat.com> (raw)
In-Reply-To: <20200602153830.GZ3522@embecosm.com>
On 6/2/20 4:38 PM, Andrew Burgess wrote:
> If we're going to add code to loop over all globals anyway, then why
> not, instead of warning about bad cases, and then wrapping tests in a
> namespace, just have this code "fix" the leaked globals by deleting
> them?
>
> My thinking is that any global that exists when we start a test should
> continue to exist at the end of the test. Any other global should
> just be unset when the test script finishes.
>
> If there really is some global state that is lazily created by a
> particular test script then (a) this seems like a bug anyway, and (b)
> this is easy to fix by giving it an earlier creation / initialisation.
>
> In this way, folk can just write test scripts, dump their junk all
> over the global namespace as they like, and we'll just clean up for
> them.
>
> Thoughts?
Hmm, I thought of this when I saw Tom's detection patch the first time,
but dismissed it, perhaps too quickly, thinking that it wouldn't
be safe. You mention global state lazily created by test scripts, but I was
thinking of lazy initialized globals within Dejagnu itself, or whatever Tcl
library we might end up using the future, which might need to be carried
over from testcase to testcase. Imagine, this in a Dejagnu function:
proc fail {} {
global number_of_fails
# Hadn't been set before. (valid since Tcl 8.5; otherwise, imagine it wrapped in 'info exits')
incr number_of_fails
}
This is obviously not the real "fail", it is just to
show the point, or the risk. I imagined there might be similar
functions in random Dejagnu boards.
(
Now that I look, it seems like Dejagnu wants to be sure to initialize
all global variables it uses in runtest.exp:
# Initialize a few global variables used by all tests.
# `reset_vars' resets several of these, we define them here to document their
# existence. In fact, it would be nice if all globals used by some interface
# of dejagnu proper were documented here.
And I guess we can always initialize some ourselves, if we find that missing.
)
So if people think the benefits outweigh the risks, then I guess
we should give it a go.
BTW, global variables alone aren't the full scope of the
bleeding between testcases. There's also the case of
testcases overriding procedures, like gdb.base/dbx.exp,
but those are perhaps rare enough that we can continue
handling it "manually" as before.
Thanks,
Pedro Alves
next prev parent reply other threads:[~2020-06-03 9:49 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-19 16:30 Tom de Vries
2020-05-22 20:15 ` Tom Tromey
2020-06-02 13:08 ` Tom de Vries
2020-06-02 15:38 ` Andrew Burgess
2020-06-02 15:52 ` Andrew Burgess
2020-06-02 16:31 ` Tom de Vries
2020-06-02 17:01 ` Andrew Burgess
2020-06-02 20:18 ` Andrew Burgess
2020-06-03 8:47 ` Tom de Vries
2020-06-03 9:38 ` Tom de Vries
2020-06-03 10:09 ` Tom de Vries
2020-06-03 10:24 ` Tom de Vries
2020-06-03 12:54 ` Andrew Burgess
2020-06-03 15:35 ` Tom de Vries
2020-06-04 11:16 ` Pedro Alves
2020-06-04 12:29 ` Tom de Vries
2020-06-12 13:11 ` [committed] gdb/testsuite: Prevent globals leaking between test scripts Tom de Vries
2020-06-03 9:49 ` Pedro Alves [this message]
2020-06-04 11:40 ` [PATCH 3/3][gdb/testsuite] Warn about leaked global array Tom de Vries
2020-06-05 10:06 ` [PATCH][gdb/testsuite] Don't leak tuiterm.exp spawn override Tom de Vries
2020-06-11 13:55 ` Tom Tromey
2020-06-12 11:36 ` [committed][gdb/testsuite] " Tom de Vries
2020-06-15 19:46 ` Tom Tromey
2020-06-17 14:55 ` Tom de Vries
2020-06-17 15:28 ` Andreas Schwab
2020-06-11 12:11 ` [committed][gdb/testsuite] Make gdb.base/dbx.exp more robust Tom de Vries
2020-06-11 12:16 ` Pedro Alves
2020-06-11 14:39 ` Simon Marchi
2020-06-11 14:52 ` Tom de Vries
2020-06-11 14:59 ` Simon Marchi
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=72b3c10c-d316-9a0e-13e9-56dee7c765a7@redhat.com \
--to=palves@redhat.com \
--cc=andrew.burgess@embecosm.com \
--cc=gdb-patches@sourceware.org \
--cc=tdevries@suse.de \
/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