From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3421 invoked by alias); 26 Apr 2006 13:44:11 -0000 Received: (qmail 3411 invoked by uid 22791); 26 Apr 2006 13:44:10 -0000 X-Spam-Check-By: sourceware.org Received: from londo.lunn.ch (HELO londo.lunn.ch) (80.238.139.98) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 26 Apr 2006 13:44:08 +0000 Received: from lunn by londo.lunn.ch with local (Exim 3.36 #1 (Debian)) id 1FYkHp-0002Zz-00; Wed, 26 Apr 2006 15:42:33 +0200 Date: Wed, 26 Apr 2006 13:44:00 -0000 To: Manfred W?lfel Cc: Andrew Lunn , eCos Disuss Message-ID: <20060426134233.GA9862@lunn.ch> Mail-Followup-To: Manfred W?lfel , Andrew Lunn , eCos Disuss References: <444DB6F4.8070900@web.de> <20060425073324.GA26178@lunn.ch> <444DE138.8060605@web.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <444DE138.8060605@web.de> User-Agent: Mutt/1.5.11+cvs20060403 From: Andrew Lunn X-IsSubscribed: yes Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Subject: Re: [ECOS] AW: probably simple problem: ASSERT in Cyg_StdIostream X-SW-Source: 2006-04/txt/msg00239.txt.bz2 On Tue, Apr 25, 2006 at 10:43:36AM +0200, Manfred W?lfel wrote: > No, I'm referring to > http://ecos.sourceware.org/ml/ecos-discuss/2005-04/msg00103.html and the > like. This is not the only topic that has been raised as a result of > that problem. I just wanted to make people that face this problem aware > of the need to break in Cyg_StdioStreamBuffer::set_buffer. But if you > ask me for it, we have to give up completely, if memory allocation fails: > > Index: packages/language/c/libc/stdio/current/include/streambuf.inl > =================================================================== > RCS file: > /cvs/ecos/ecos/packages/language/c/libc/stdio/current/include/streambuf.inl,v > retrieving revision 1.6 > diff -u -r1.6 streambuf.inl > --- packages/language/c/libc/stdio/current/include/streambuf.inl > 23 May 2002 23:07:16 -0000 1.6 > +++ packages/language/c/libc/stdio/current/include/streambuf.inl > 25 Apr 2006 08:41:32 -0000 > @@ -92,7 +92,8 @@ > // unnecessary, but it is to ensure a defined state if e.g. the malloc > // in set_buffer() should fail > > - (void)set_buffer(size, new_buffer); > + Cyg_ErrNo err = set_buffer(size, new_buffer); > + CYG_ASSERT(err == ENOERR, "insufficient memory"); > } // Cyg_StdioStreamBuffer constructor > > > Andrew Lunn wrote: > >On Tue, Apr 25, 2006 at 07:43:16AM +0200, Manfred W?lfel wrote: > > > >>In the case of buffered IO, the constructor of Cyg_StdioStream > >>constructs a Cyg_StdioStreamBuffer object io_buf. The constructor of > >>Cyg_StdioStreamBuffer calls Cyg_StdioStreamBuffer::set_buffer that may > >>fail for lack of memory. The returned error is silently ignored in the > >>constructor of Cyg_StdioStreamBuffer. In this case the constructor of > >>Cyg_StdioStream gives up, before the magic value is set. I don't think throwing an assert is the correct fix. It looks like Cyg_StdioStream::initialize returns ENOMEM when the buffer cannot be created. The constructor needs to return this error code so what ever needs the stream knows there was no memory and propergate on the error. Andrew -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss