From: "Daniel P. Berrange" <berrange@redhat.com>
To: "Marc-André Lureau" <mlureau@redhat.com>
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
qemu-devel@nongnu.org, "peter maydell" <peter.maydell@linaro.org>,
armbru@redhat.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PULL 10/26] tests: fix small leak in test-io-channel-command
Date: Tue, 6 Sep 2016 14:00:07 +0100 [thread overview]
Message-ID: <20160906130007.GH10095@redhat.com> (raw)
In-Reply-To: <1486217545.12.1473166413883.JavaMail.zimbra@redhat.com>
On Tue, Sep 06, 2016 at 08:53:33AM -0400, Marc-André Lureau wrote:
> Hi
>
> ----- Original Message -----
> > On Tue, Sep 06, 2016 at 04:26:23PM +0400, Marc-André Lureau wrote:
> > > srcfifo && dstfifo must be freed in error case, however unlink() may
> > > delete a file from a different context. Instead, use mkdtemp()/rmdir()
> > > for the temporary files.
> >
> > This isn't making much sense to me. What different context are
> > you referring to ? The fifo filename is unique to this particular
> > unit test and AFAIK, we don't support running the same unit test
> > multiple times concurrently, so the existing unlink looks safe to
> > me.
>
> This was changed to address Eric's comment: https://lists.nongnu.org/archive/html/qemu-devel/2016-07/msg04554.html
That could have been trivially fixed by reordering the cleanup code
eg
unlink(TEST_FIFO);
end:
g_free(srcfifo);
g_free(dstfifo);
}
>
> Is it a problem to use temporary dir instead so tests could actually
> run concurrently?
I've always written tests on the assumption that distinct unit tests
can run concurrently, but you'll never have the same unit test run
concurrently. IMHO running the same unit test concurrently is a
non-goal.
> Anything wrong with this patch?
It needlessly adds extra code complexity to solve a non-goal IMHO.
> > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > Reviewed-by: Eric Blake <eblake@redhat.com>
> > > ---
> > > tests/test-io-channel-command.c | 20 +++++++++++++-------
> > > tests/test-qga.c | 3 ++-
> > > 2 files changed, 15 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/tests/test-io-channel-command.c
> > > b/tests/test-io-channel-command.c
> > > index 1d1f461..f99118e 100644
> > > --- a/tests/test-io-channel-command.c
> > > +++ b/tests/test-io-channel-command.c
> > > @@ -18,6 +18,7 @@
> > > *
> > > */
> > >
> > > +#include <glib/gstdio.h>
> > >
> > > #include "qemu/osdep.h"
> > > #include "io/channel-command.h"
> > > #include "io-channel-helpers.h"
> > > @@ -26,11 +27,14 @@
> > > #ifndef WIN32
> > > static void test_io_channel_command_fifo(bool async)
> > > {
> > > -#define TEST_FIFO "tests/test-io-channel-command.fifo"
> > > QIOChannel *src, *dst;
> > > QIOChannelTest *test;
> > > - char *srcfifo = g_strdup_printf("PIPE:%s,wronly", TEST_FIFO);
> > > - char *dstfifo = g_strdup_printf("PIPE:%s,rdonly", TEST_FIFO);
> > > + char *tmpdir = g_strdup("/tmp/test-io-channel.XXXXXX");
> > > + g_assert_nonnull(mkdtemp(tmpdir));
> > > +
> > > + char *fifo = g_strdup_printf("%s/command.fifo", tmpdir);
> > > + char *srcfifo = g_strdup_printf("PIPE:%s,wronly", fifo);
> > > + char *dstfifo = g_strdup_printf("PIPE:%s,rdonly", fifo);
> > > const char *srcargv[] = {
> > > "/bin/socat", "-", srcfifo, NULL,
> > > };
> > > @@ -38,11 +42,10 @@ static void test_io_channel_command_fifo(bool async)
> > > "/bin/socat", dstfifo, "-", NULL,
> > > };
> > >
> > > - unlink(TEST_FIFO);
> > > if (access("/bin/socat", X_OK) < 0) {
> > > - return; /* Pretend success if socat is not present */
> > > + goto end; /* Pretend success if socat is not present */
> > > }
> > > - if (mkfifo(TEST_FIFO, 0600) < 0) {
> > > + if (mkfifo(fifo, 0600) < 0) {
> > > abort();
> > > }
> > > src = QIO_CHANNEL(qio_channel_command_new_spawn(srcargv,
> > > @@ -59,9 +62,12 @@ static void test_io_channel_command_fifo(bool async)
> > > object_unref(OBJECT(src));
> > > object_unref(OBJECT(dst));
> > >
> > > +end:
> > > + g_free(fifo);
> > > g_free(srcfifo);
> > > g_free(dstfifo);
> > > - unlink(TEST_FIFO);
> > > + g_rmdir(tmpdir);
> > > + g_free(tmpdir);
> > > }
> > >
> > >
> > > diff --git a/tests/test-qga.c b/tests/test-qga.c
> > > index 21f44f8..0d1acef 100644
> > > --- a/tests/test-qga.c
> > > +++ b/tests/test-qga.c
> > > @@ -55,7 +55,8 @@ fixture_setup(TestFixture *fixture, gconstpointer data)
> > > fixture->loop = g_main_loop_new(NULL, FALSE);
> > >
> > > fixture->test_dir = g_strdup("/tmp/qgatest.XXXXXX");
> > > - g_assert_nonnull(mkdtemp(fixture->test_dir));
> > > + path = mkdtemp(fixture->test_dir);
> > > + g_assert_nonnull(path);
> > >
> > > path = g_build_filename(fixture->test_dir, "sock", NULL);
> > > cwd = g_get_current_dir();
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
next prev parent reply other threads:[~2016-09-06 13:00 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-06 12:26 [Qemu-devel] [PULL 00/26] Leak patches Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 01/26] tests: fix test-qga leaks Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 02/26] glib-compat: add g_(s)list_free_full() Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 03/26] qga: free the whole blacklist Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 04/26] qga: free remaining leaking state Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 05/26] tests: fix test-cutils leaks Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 06/26] tests: fix test-vmstate leaks Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 07/26] tests: fix test-iov leaks Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 08/26] tests: fix check-qom-interface leaks Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 09/26] tests: fix check-qom-proplist leaks Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 10/26] tests: fix small leak in test-io-channel-command Marc-André Lureau
2016-09-06 12:46 ` Daniel P. Berrange
2016-09-06 12:53 ` Marc-André Lureau
2016-09-06 13:00 ` Daniel P. Berrange [this message]
2016-09-06 13:01 ` Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 11/26] tests: fix leak in test-string-input-visitor Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 12/26] portio: keep references on portio Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 13/26] pc: simplify passing qemu_irq Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 14/26] pc: don't leak a20_line Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 15/26] machine: use class base init generated name Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 16/26] acpi-build: fix array leak Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 17/26] tests: fix qom-test leaks Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 18/26] pc: free i8259 Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 19/26] pc: keep gsi reference Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 20/26] sd: free timer Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 21/26] ipmi: free extern timer Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 22/26] bus: simplify name handling Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 23/26] tests: add qtest_add_data_func_full Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 24/26] tests: pc-cpu-test leaks fixes Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 25/26] tests: fix rsp leak in postcopy-test Marc-André Lureau
2016-09-06 12:26 ` [Qemu-devel] [PULL 26/26] tests: fix postcopy-test leaks Marc-André Lureau
2016-09-06 15:16 ` [Qemu-devel] [PULL 00/26] Leak patches Peter Maydell
2016-09-06 15:33 ` Marc-André Lureau
2016-09-06 15:36 ` Peter Maydell
2016-09-07 18:57 ` Marc-André Lureau
2016-09-07 19:16 ` Eric Blake
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=20160906130007.GH10095@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mlureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.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 NNTP newsgroup(s).