From owner-freebsd-hackers Fri Oct 26 8: 0:24 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from straylight.ringlet.net (sentinel.office1.bg [217.75.129.210]) by hub.freebsd.org (Postfix) with SMTP id 23A6D37B403 for ; Fri, 26 Oct 2001 08:00:03 -0700 (PDT) Received: (qmail 16270 invoked by uid 1000); 26 Oct 2001 14:58:19 -0000 Date: Fri, 26 Oct 2001 17:58:19 +0300 From: Peter Pentchev To: Maxim Sobolev Cc: Ian Dowse , 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> Mail-Followup-To: Maxim Sobolev , Ian Dowse , hackers@FreeBSD.org References: <200110261421.aa89321@salmon.maths.tcd.ie> <3BD977E4.DA2F224B@FreeBSD.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <3BD977E4.DA2F224B@FreeBSD.org>; from sobomax@FreeBSD.org on Fri, Oct 26, 2001 at 05:49:08PM +0300 Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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