qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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

  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).