From: Jamie Lokier <jamie@shareable.org>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] opengl rendering in the sdl window
Date: Mon, 8 Sep 2008 20:32:27 +0100 [thread overview]
Message-ID: <20080908193226.GA13612@shareable.org> (raw)
In-Reply-To: <48C54D62.5060509@codemonkey.ws>
Anthony Liguori wrote:
> The difficulty is deleting the shared memory segment reliably.
>
> Normally, what you want to do is:
>
> shmget()
> shmat()
> shmctl(IPC_RMID)
>
> ...
>
> shmdt()
>
> And the first sequence has to be as reliable and quick as possible
> because if you exit before the shmctl(), you'll leak the shared memory.
Yes, it's ugly, but it's the same problem faced by Gtk apps etc. which
are writing images - doesn't even SDL have this problem?
The nearest thing to "right" I found in X11-SHM apps is:
- Catch many signals and shmctl(SHM_RMID) in the handler before
re-raising the signal to kill the program.
- Try to recognise old, stale shm segments when starting anew
and remove them. This can be done by putting a signature into
them somewhere which won't be overridden in use.
(There is also some trickiness in ensuring that the connection really
is local, and you're not doing a remote connection which just happens
to successfully attach to a SHM segment on a different machine with
the same id. With SSH X11 forwarding and other ways X11 is proxied, I
found the only way to be sure is create a segment, write strong random
values to it, ask the X server to read from it and return the pixel
values over the normal connection, and verify if they match.)
But that's X11-SHM. For a new protocol, you can do this:
- fd = shm_open()
- shm_unlink()
- pass file descriptor over the connection.
Or even this:
- fd = open("/tmp/XXX")
- unlink()
- pass file descriptor over the connection.
Both ends call mmap().
It's not perfect (there really should be a create-shmem-with-no-name
syscall), but the window for leaks is quite small, and it's fine to
use in a library.
-- Jamie
next prev parent reply other threads:[~2008-09-08 19:32 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-29 15:22 [Qemu-devel] [PATCH] opengl rendering in the sdl window Stefano Stabellini
2008-09-02 16:53 ` Ian Jackson
2008-09-04 3:00 ` Anthony Liguori
2008-09-04 7:41 ` Gerd Hoffmann
2008-09-04 9:42 ` Daniel P. Berrange
2008-09-04 10:06 ` Andreas Färber
2008-09-04 10:20 ` Daniel P. Berrange
2008-09-05 16:42 ` Andreas Färber
2008-09-07 7:51 ` Avi Kivity
2008-09-07 3:07 ` Anthony Liguori
2008-09-07 16:31 ` Daniel P. Berrange
2008-09-08 0:12 ` Anthony Liguori
2008-09-04 10:06 ` Stefano Stabellini
2008-09-05 12:02 ` Jamie Lokier
2008-09-05 12:11 ` Samuel Thibault
2008-09-06 23:27 ` Jamie Lokier
2008-09-07 14:22 ` Samuel Thibault
2008-09-07 14:36 ` Paul Brook
2008-09-07 14:42 ` Samuel Thibault
2008-09-07 15:03 ` Paul Brook
2008-09-07 15:12 ` Samuel Thibault
2008-09-07 15:35 ` Paul Brook
2008-09-07 15:41 ` Samuel Thibault
2008-09-07 15:57 ` Paul Brook
2008-09-08 0:08 ` Anthony Liguori
2008-09-08 0:21 ` Samuel Thibault
2008-09-08 1:18 ` Jamie Lokier
2008-09-08 10:38 ` Stefano Stabellini
2008-09-08 13:21 ` Jamie Lokier
2008-09-05 16:44 ` Stefano Stabellini
2008-09-05 16:55 ` Daniel P. Berrange
2008-09-05 17:13 ` Stefano Stabellini
2008-09-07 3:21 ` Anthony Liguori
2008-09-08 10:48 ` Stefano Stabellini
2008-09-08 13:16 ` Jamie Lokier
2008-09-08 13:51 ` Stefano Stabellini
2008-09-08 13:41 ` Jamie Lokier
2008-09-08 13:48 ` Daniel P. Berrange
2008-09-08 14:56 ` Gerd Hoffmann
2008-09-08 15:08 ` Jamie Lokier
2008-09-08 15:35 ` Gerd Hoffmann
2008-09-08 15:39 ` Jamie Lokier
2008-09-08 16:23 ` Gerd Hoffmann
2008-09-08 16:47 ` Anthony Liguori
2008-09-08 19:15 ` Gerd Hoffmann
2008-09-08 19:43 ` Jamie Lokier
2008-09-08 15:47 ` Daniel P. Berrange
2008-09-08 16:05 ` Anthony Liguori
2008-09-08 17:08 ` Mike Kronenberg
2008-09-08 19:21 ` Gerd Hoffmann
2008-09-08 21:06 ` Mike Kronenberg
2008-09-08 19:32 ` Jamie Lokier [this message]
2008-09-08 19:48 ` Jamie Lokier
2008-09-08 19:57 ` Anthony Liguori
2008-09-08 20:11 ` Jamie Lokier
2008-09-08 23:18 ` Daniel P. Berrange
2008-09-09 0:10 ` Jamie Lokier
2008-09-09 2:45 ` Anthony Liguori
2008-09-09 4:17 ` Jamie Lokier
2008-09-08 14:22 ` Anthony Liguori
2008-09-07 7:48 ` Avi Kivity
2008-09-07 11:57 ` Daniel P. Berrange
2008-09-07 13:12 ` Avi Kivity
2008-09-08 10:30 ` Stefano Stabellini
2008-09-08 10:35 ` Daniel P. Berrange
2008-09-08 10:53 ` Stefano Stabellini
2008-09-08 11:00 ` Daniel P. Berrange
2008-09-08 12:38 ` François Revol
2008-09-08 13:05 ` Jamie Lokier
2008-09-08 13:08 ` Anthony Liguori
2008-09-08 13:44 ` François Revol
2008-09-05 18:11 ` malc
2008-09-04 10:14 ` Stefano Stabellini
2008-09-07 3:09 ` Anthony Liguori
2008-09-04 10:21 ` Andreas Färber
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=20080908193226.GA13612@shareable.org \
--to=jamie@shareable.org \
--cc=anthony@codemonkey.ws \
--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).