Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Oct 2001 17:58:19 +0300
From:      Peter Pentchev <roam@ringlet.net>
To:        Maxim Sobolev <sobomax@FreeBSD.org>
Cc:        Ian Dowse <iedowse@maths.tcd.ie>, hackers@FreeBSD.org
Subject:   Re: cvs commit: ports/devel/ORBit Makefile ports/devel/ORBit/files patch-src::IIOP::giop-msg-buffer.c
Message-ID:  <20011026175819.G33751@straylight.oblivion.bg>
In-Reply-To: <3BD977E4.DA2F224B@FreeBSD.org>; from sobomax@FreeBSD.org on Fri, Oct 26, 2001 at 05:49:08PM %2B0300
References:  <200110261421.aa89321@salmon.maths.tcd.ie> <3BD977E4.DA2F224B@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Oct 26, 2001 at 05:49:08PM +0300, Maxim Sobolev wrote:
> Ian Dowse wrote:
> > 
> > In message <200110261306.f9QD61O73080@freefall.freebsd.org>, Maxim Sobolev writ
> > es:
> > >  Nautilus from working properly. The problem disappeared when I've replaced
> > >  writev(2) call with appropriate loop based around ordinary write(2). Perhaps
> > >  this should be investigated and the real source of the problem fixed instead,
> > >  but I do not have a time for this right now. For those who interested I'm
> > >  ready to provide a step-by step instruction on how to reproduce the bug.
> > 
> > Hi,
> > 
> > If you have the details handy, a post to -hackers is likely to be
> > quite constructive at getting the problem analysed and resolved.
> 
> Ok, details are below.
> 
> GNOME oaf is a CORBA-based RPC framework. It uses UNIX
> domain sockets to communicate between client application and
> oafd daemon that serves requests. Usually the communication
> looks like the following:
> 
> 1. Client connects to the oafd daemon via domain socket and
> sends marshalled RPC request.
> 2. The daemon reads request, demarshalls it and executes
> either internally or by invoking external program/shared
> library.
> 3. The daemon marshalls result of the call and passes it
> back to the client via the same socket.
> 
> On the step 3, when marshalling results of the call, daemon
> creates a large collection of small buffers (usually 5-10
> bytes long each) arranged as array of struct iovec and then
> sends this whole buffer to the client using writev(2) call.
> In my particular case there were some 2,800 entries in the
> buffer and when the daemon tried to send it to the client
> writev(2) was returning -1 and setting errno to be EINVAL,
> which confused the server and the client causing RPC to
> fail.

2800 entries?  Well, from the writev(2) manual page:

     In addition, writev() may return one of the following errors:

     ...

     [EINVAL]           Iovcnt was less than or equal to 0, or greater than
                        UIO_MAXIOV.

And at least on -stable, UIO_MAXIOV is defined as 1024..

G'luck,
Peter

-- 
Thit sentence is not self-referential because "thit" is not a word.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011026175819.G33751>