public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: "Alex Vinokur" <alexvn@connect.to>
To: cygwin@cygwin.com
Subject: Re: assertion "ptr != MAP_FAILED" failed while using mmap
Date: Thu, 26 Jun 2003 06:08:00 -0000	[thread overview]
Message-ID: <bddr4g$on$1@main.gmane.org> (raw)
In-Reply-To: <Pine.GSO.4.44.0306251849140.22307-100000@slinky.cs.nyu.edu>


"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);
char* ptr = (char*)mmap(0, sz, PROT_READ, 0, fd, 0);

   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 : 0 No error ===

Regards,
   =====================================
   Alex Vinokur
     mailto:alexvn@connect.to
     http://mathforum.org/library/view/10978.html
   =====================================






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

  reply	other threads:[~2003-06-26  5:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-25 15:17 Alex Vinokur
2003-06-25 16:51 ` Elfyn McBratney
2003-06-25 16:55   ` Ronald Landheer-Cieslak
2003-06-25 21:40     ` Elfyn McBratney
2003-06-26  5:06       ` Igor Pechtchanski
2003-06-26  6:08         ` Alex Vinokur [this message]
2003-06-26  8:31           ` Alex Vinokur
2003-06-26  9:53             ` Brian Dessent
2003-06-26 11:33               ` Alex Vinokur
2003-06-26  9:23           ` Brian Dessent
2003-06-26 19:21 ` Comparative performance : Reading contents from file into one string Alex Vinokur

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='bddr4g$on$1@main.gmane.org' \
    --to=alexvn@connect.to \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).