Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe@cygwin.com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-help@cygwin.com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
Delivered-To: mailing list cygwin@cygwin.com
X-Injected-Via-Gmane: http://gmane.org/
To: cygwin@cygwin.com
From: "Alex Vinokur" <alexvn@connect.to>
Subject: Re: assertion "ptr != MAP_FAILED" failed while using mmap
Date: Thu, 26 Jun 2003 08:32:28 +0300
Lines: 69
Message-ID: <bde0gu$huc$1@main.gmane.org>
References: <Pine.CYG.4.55.0306251825330.3408@ellixia> <Pine.GSO.4.44.0306251849140.22307-100000@slinky.cs.nyu.edu> <bddr4g$on$1@main.gmane.org>
X-Complaints-To: usenet@main.gmane.org
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4522.1200
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200


"Alex Vinokur" <alexvn@connect.to> wrote in message news:bddr4g$on$1@main.gmane.org...
>
> "Igor Pechtchanski" <pechtcha@cs.nyu.edu> wrote in message news:Pine.GSO.4.44.0306251849140.22307-100000@slinky.cs.nyu.edu...
> [snip]
> >
> > 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
> [snip]
>
>
> Here is updated 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);
    errno = 0;
> char* ptr = (char*)mmap(0, sz, PROT_READ, 0, fd, 0);
>
--------------------------------
Must be removed
>    errno = 0;
--------------------------------
>   if (ptr != MAP_FAILED)
>   {
>     string str(ptr, ptr+sz);
>     munmap(ptr, sz);
>   }
>   else
>   {
>     assert (ptr == MAP_FAILED);
>     printf ("=== Error : %u %s ===\n", errno, strerror (errno));
>   }
>   assert (ptr != MAP_FAILED);  // Here assertion failed
>
>   close(fd);
> }
> --------------------------------------
>
> The program prints:
=== Error : 22 Invalid argument ===

Which argument?

[snip]

   ==========================================
   Alex Vinokur
     mailto:alexvn@connect.to
     http://www.simtel.net/pub/oth/19088.html
     http://sourceforge.net/users/alexvn
   ==========================================






--
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/

