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 08:31:00 -0000 [thread overview]
Message-ID: <bde0gu$huc$1@main.gmane.org> (raw)
In-Reply-To: <bddr4g$on$1@main.gmane.org>
"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/
next prev parent reply other threads:[~2003-06-26 5:47 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
2003-06-26 8:31 ` Alex Vinokur [this message]
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='bde0gu$huc$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).