From: "peter garrone" <pgarrone@linuxmail.org>
To: cygwin@cygwin.com
Subject: munmap bug test program
Date: Tue, 30 Sep 2003 02:11:00 -0000 [thread overview]
Message-ID: <20030930020612.11298.qmail@linuxmail.org> (raw)
This test program highlights the recent munmap problem addressed by Corinna.
It works with the updated mmap, and with linux, fails on cygwin with the prior mmap.
/**
* mmap test.
* mmaps two chunks of adjacent memory, then munmaps one and a half,
* then sees if the remainder is still useable.
*/
#include <unistd.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <fcntl.h>
#include <string.h>
#ifndef _POSIX_MAPPED_FILES
#warning Testing mmap/munmap, but _POSIX_MAPPED_FILES not defined.
#endif
#define CHUNKSIZE 0x10000
#undef Dim
#define Dim(x) ((int)(sizeof(x)/sizeof(x[0])))
void * mapping1,*mapping2;
char buff[CHUNKSIZE*4];
int main()
{
int fd;
int r;
int temp_open_flags;
char name[] = "test_cygwin_munmapXXXXXX";
fd = mkstemp(name);
assert(fd != -1);
temp_open_flags = fcntl(fd, F_GETFL);
assert(temp_open_flags != -1);
assert((temp_open_flags & O_RDWR) == O_RDWR);
/* Have to write to the file for mapping to work. */
r = write(fd, buff, sizeof(buff));
assert(r == sizeof(buff));
mapping1 = mmap(0, 2*CHUNKSIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
assert(mapping1 != MAP_FAILED);
mapping2 = mmap(mapping1 + 2*CHUNKSIZE, 2*CHUNKSIZE,
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 2*CHUNKSIZE);
if(mapping2 == MAP_FAILED)
{
printf("OS wont do contiguous memory file mappings. Cant do test. Try changing CHUNKSIZE\n");
munmap(mapping1, 2*CHUNKSIZE);
close(fd);
unlink(name);
exit(0);
}
printf("mappings: %x %x\n",mapping1,mapping2);
/* Unmap from middle of first chunk to end of second chunk. */
r = munmap(mapping1 + CHUNKSIZE, 3*CHUNKSIZE);
assert(r == 0);
/* now try setting the first half of the first chunk */
memset(mapping1, 0, CHUNKSIZE);
close(fd);
/* Unmap the last bit, so hopefully the unlink of the temporary file will work. */
r = munmap(mapping1, CHUNKSIZE);
assert(r == 0);
r = unlink(name);
assert(r == 0);
return 0;
}
--
______________________________________________
http://www.linuxmail.org/
Now with e-mail forwarding for only US$5.95/yr
Powered by Outblaze
--
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 reply other threads:[~2003-09-30 2:06 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-09-30 2:11 peter garrone [this message]
2003-09-30 14:39 ` Corinna Vinschen
2003-10-01 0:22 peter garrone
2003-10-01 7:29 ` munmap " Corinna Vinschen
2003-10-01 10:06 ` Robert Collins
2003-10-01 11:33 ` Corinna Vinschen
2003-10-01 13:18 ` Robert Collins
2003-10-01 0:26 peter garrone
2003-10-01 0:52 ` peter garrone
2003-10-02 0:34 peter garrone
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=20030930020612.11298.qmail@linuxmail.org \
--to=pgarrone@linuxmail.org \
--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).