[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Out-of-Line memory deallocation: MIG vs. glibc
From: |
olafBuddenhagen |
Subject: |
Re: Out-of-Line memory deallocation: MIG vs. glibc |
Date: |
Wed, 12 Apr 2006 23:05:39 +0200 |
User-agent: |
Mutt/1.5.11+cvs20060126 |
Hi again,
On Mon, Apr 10, 2006 at 06:57:21PM -0400, Thomas Schwinge wrote:
> On Mon, Apr 10, 2006 at 01:32:17AM +0200, olafBuddenhagen@gmx.net
> wrote:
> > so many [port rights for the fdarray[] argument] that they are
> > automatically transferred out-of-line, which is one of the
> > conditions causing the crash. I wonder whether this is some bug by
> > itself.
>
> Could you please elaborate on that?
When invoking an RPC with a variable-sized argument, the size of the
argument is checked. If it's <= 2 KiB, it iss transferred inline, as
part of the message body. If it is larger however, it is transferred
out-of-line, i.e. in an extra memory region that will get mapped into
the receiver's address space.
This also happens if the argument is an array of port rights: If it has
more than 2 KiB (512 entries), it is transferred out-of-line. This is
the condition under which the deallocation problem will show. (If the
RPC returns an error code.)
What I meant (you should have cited the hole paragraph -- it's missing
context), is not that the large array being transferred out-of-line is a
bug; this seems to be conscious and probably reasonable. I meant it
could be a bug that fakeroot-tcp tries to transfer this enormous arrays
in the first place. It just seems strange, but I haven't checked --
maybe there is some good reason for doing this.
Sorry for being unclear.
-antrik-