Looks like Oleg made a mistake in posting the code. I saw an earlier version
of this in freebsd-questions and followed up with him.

I've appended the version I think he meant to include.

He's reporting this behavior with 3.2R. Runs fine with 'mmap -u', appears to
hang the machine on the second iteration (file "1") with 'mmap'.

Runs fine on Solaris 2.6 and Digital Unix 4.0D  -- with the exception of
filling the disk without "-u" :^).

He's trying to ask if this is a problem with the code in question or 3.2R's
mmap.

Charles

--- mmap.c ---
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
 
main(int argc, char *argv[])
{
    int fd;
    int i;
    int len=1024*1024*10;  /*ie 10Mbytes*/
    caddr_t addr;
    char ttt[80];
    int bunlink = 0;

    if ( argc > 1 && strcmp(argv[1], "-u") == 0 ) {
      bunlink = 1;
    }
    printf("unlink files? %s\n", bunlink ? "YES" : "NO");
  
    for (i=0;;i++)
    {
    sprintf (ttt,"%d",i);
    printf("mmaping %ld byte region on file %s\n", len, ttt);
    fd=open(ttt,O_CREAT|O_RDWR,0666);
    if (fd<0)
    {
        printf("open error %ld\n",errno);
        exit(1);
    }
    lseek(fd,len-1,SEEK_SET);
    write(fd,"",1);
    addr=mmap(0,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
    if (addr==MAP_FAILED)
    {
        printf("mmap error %ld",errno);
        exit(1);
    }
    memset(addr,'x',len);
    if ( munmap(addr, len) != 0 ) {
      fprintf(stderr, "munmap failed\n");
      exit(EXIT_FAILURE);
    }
    close(fd);
    if ( bunlink ) unlink(ttt);
    }
}


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to