Re: cannot map temp file pool

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


Jan Willem Stumpel wrote:
Damyan Ivanov wrote:

WTH is this? No idea what "map temp file pool" means. I hope
someone is still around who can answer this. The dosemu font was
always OK, BTW.

I'd run xdosemu under strace and look for "permission denied" errors

I tried that -- but could not make sense of it. I get things like

These things make some sense to me. Perhaps I can help. Someone with
the source can help better.

open("/dev/shm/dosemu_16975", O_RDWR|O_CREAT|O_TRUNC|O_NOFOLLOW,
0600) = 5

open(.,.,.) opens files or devices for reading or writing, and
returns a small positive integer on success. This integer is
used for later calls to do things to the file or device.
If it fails, it returns -1. This indicates successful open
on /dev/shm/dosemu_16975 with READ+WRITE, CREATE if non-existent,
TRUNCATE an existing file and reuse it, do NOT FOLLOW links.

Now, /dev/shm is SHARED MEMORY. It is there to allow multiple
processes to access the same memory area without having to
use interprocess communication. There is no file involved.

The open channel number (FD or File Descriptor) is 5.

fcntl64(5, F_GETFD)                     = 0

fcntl(fd,option,...) does various File CoNTroL operations.
It returns 0 for success, -1 for an error. FD number 5 (return
from above open) was successfully queried.

       Read  the  close-on-exec flag.  If the FD_CLOEXEC bit is 0, the
       file will remain open across exec, otherwise it will be closed.

fcntl64(5, F_SETFD, FD_CLOEXEC)         = 0

Again, FD 5 has had an option set successfully.

       Set  the  close-on-exec  flag  to  the  value  specified by the
       FD_CLOEXEC bit of arg.

In this case, set to TRUE.

unlink("/dev/shm/dosemu_16975")         = 0

The "file" has been "removed". This means it has been marked
by the system for removal. But it is still open (we guess,
since no close() has been done), so the "file" still exists,
but when it is closed, it will automagically go away.

IOW, when all processes have relinquished access to the
shared memory (like by exiting to the system), then the
shared memory will be returned to the pool.

ftruncate(5, 0)                         = 0

ftruncate(Fd,Size) sets the size of a file. I suppose
that in the case of shared memory, it resizes it. This
is a successful call.

ftruncate(5, 15794176)                  = 0

Ditto. It successfully changed FD 5 to 15794176 bytes.

5, 0) = -1 EPERM (Operation not permitted)

This is a POSIX call, IIRC.

This call has failed. mmap2() attempts to map a shared memory region
to a real process relative memory address so it can do accesses.

     void * mmap2(void *start, size_t length, int prot, int flags, int  fd,
       off_t pgoffset);

start	the requested start location in memory; this is only a
	suggestion, and the system may not use the requested
	address. NULL means you are willing to accept whatever
	the system gives you (which is what is going to happen,

length	number of bytes to map to the process memory

prot	access protection requested

flags	some access flags

fd	File Descriptor (5 in this case, our shared memory region)

pg_offset	offset into the shared memory region to start
		mapping. In this case, no beginning piece
		is skipped over, we want it all.

This call, when it succeeds, returns a pointer to the shared memory
region. Again, this was done on FD 5. The requested
permissions are READ, WRITE, EXECUTE, flags are SHARED access.
The return indicates that the operation failed (-1) and
the errno indicates PERMISSION DENIED.

So, it appears that something is wrong with your permissions
on /dev/shm/dosemu_16975.

$ ls -ld /dev/shm
drwxrwxrwt  2 root root 40 Sep  8 06:57 /dev/shm

My shared memory is accessible to everyone, apparently.

I wonder whether your permission bits are incorrect on

write(4, "ERROR: MAPPING: cannot map temp "..., 67) = 67

This is a successful attempt to write some byes to
FD 4 (probably some log file). It tried to write 67 bytes,
and wrote 67 bytes. This is a successful call, probably
reporting the mmmap2() failure.

write(2, "ERROR: MAPPING: cannot map temp "..., 67) = 67

This is a successful attempt to write to FD 2 (stderr, the
standard error reporting file, likely your display) probably
the very same message.

15794176 is some suspiciously "round" number (hex 00F10000).

It's the length of the mapped area. It's normal for this
to be a "round" number.

I'd appreciate any ideas.

Well, hopefully I've given you some.

This message made from 100% recycled bits.
You have found the bank of Larn.
I can explain it for you, but I can't understand it for you.
I speak only for myself, and I am unanimous in that!
To unsubscribe from this list: send the line "unsubscribe linux-msdos" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at

[Index of Archives]     [Linux Console]     [Linux Audio]     [Linux for Hams]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite Camping]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Samba]     [Linux Media]     [Fedora Users]

  Powered by Linux