delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/06/25/21:05:17

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Authentication-Warning: slinky.cs.nyu.edu: pechtcha owned process doing -bs
Date: Wed, 25 Jun 2003 18:56:43 -0400 (EDT)
From: Igor Pechtchanski <pechtcha AT cs DOT nyu DOT edu>
Reply-To: cygwin AT cygwin DOT com
To: cygwin AT cygwin DOT com
Subject: Re: assertion "ptr != MAP_FAILED" failed while using mmap
In-Reply-To: <Pine.CYG.4.55.0306251825330.3408@ellixia>
Message-ID: <Pine.GSO.4.44.0306251849140.22307-100000@slinky.cs.nyu.edu>
Importance: Normal
MIME-Version: 1.0

On Wed, 25 Jun 2003, Elfyn McBratney wrote:

> On Wed, 25 Jun 2003, Ronald Landheer-Cieslak wrote:
>
> > On Wed, 25 Jun 2003, Elfyn McBratney wrote:
> >
> > > On Wed, 25 Jun 2003, Alex Vinokur wrote:
> > >
> > > > ===========================================
> > > > Windows 2000
> > > > CYGWIN_NT-5.0 1.3.22(0.78/3/2)
> > > > GNU gcc version 3.2 20020927 (prerelease)
> > > > ===========================================
> > > >
> > > > Here is some function.
> > > >
> > > > --------------------------------------
> > > > void read_file (char* filename_i)
> > > > {
> > > > int fd = open(filename_i, O_RDONLY);
> > > >   assert (fd > 2);
> > > >
> > > > off_t sz = lseek(fd, 0, SEEK_END);
> > > > char* ptr = (char*)mmap(0, sz, PROT_READ, 0, fd, 0);
> > > >
> > > >   assert (ptr != MAP_FAILED);  // Here assertion failed
> > > >   if (ptr != MAP_FAILED)
> > > >   {
> > > >     string str(ptr, ptr+sz);
> > > >     munmap(ptr, sz);
> > > >   }
> > > >
> > > >   close(fd);
> > > > }
> > > > --------------------------------------
> > > >
> > > > Assertion  "ptr != MAP_FAILED)" failed.
> > > > What might cause that?
> > >
> > > This is just a stab in the dark, of course, but surely `ptr != MAP_FAILED'
> > > would indicate that the mmap did not fail? Assertions (assert()) are based on
> > > true or false, so the above assert is false in that `ptr != MAP_FAILED'.
> > >
> > > Elfyn
> >
> > Ehm..
> >
> > If ptr != MAP_FAILED is not true, that means ptr == MAP_FAILED.
> > assert(ptr != MAP_FAILED) thus fails if mmap fails..
> >
> > unless I'm missing something..
>
> But what's the point in 'assert (ptr != NULL)'? Surely the best way to test for
> failure is the other way round (s/!=/==/), if ptr == MAP_FAILED assert, or
> continue...No?
>
> Elfyn

Umm, Elfyn, the semantics of "assert()" is that you assert some predicate
to be true.  If the predicate is indeed true, the program continues
normally.  If the predicate is false, the program fails.
The predicate in this case is "ptr != MAP_FAILED".  Thus, the predicate
was false when the assertion failed, and ptr == MAP_FAILED.

To the OP: this means that mmap() did fail for some reason.  It should
have set errno to indicate why.  You should check that instead of
asserting -- mmap does fail occasionally.  Also FYI, once you assert, the
following test for "ptr != MAP_FAILED" is redundant -- the program will
not get there otherwise.
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha AT cs DOT nyu DOT edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor AT watson DOT ibm DOT com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"I have since come to realize that being between your mentor and his route
to the bathroom is a major career booster."  -- Patrick Naughton


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019