munmap_peer()

Updated: April 19, 2023

Unmap a part of the virtual address space in another process

Synopsis:

#include <sys/mman_peer.h>

int munmap_peer( pid_t pid,
                 void *addr,
                 size_t len );

Arguments:

pid
The ID of the process in which you want to unmap memory.
addr
A pointer to where you want to unmap the object in the specified process's address space. The addr is the beginning of the range of addresses that you want to unmap.
len
The number of bytes to unmap into the specified process's address space. Note that length of the range of addresses can't be 0.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The munmap_peer() function removes any mappings for pages in the address range for the specified process starting at addr and continuing for len bytes, rounded up to the next multiple of the page size. References to unmapped pages cause a SIGSEGV signal to be set on the process.

If there are no mappings in the specified address range, then munmap_peer() has no effect.

CAUTION:
We recommend that mmap_peer() and munmap_peer() be called only by a server on behalf of a client that's currently reply-blocked on the server and expects the message that it sent to result in a change to its address space. For example, the server can define a protocol that includes ALLOC_BUFFER and FREE_BUFFER messages, making it explicit that the message will result in memory mapping and unmapping, respectively. Otherwise the client's address space layout could unexpectedly change, leading to race conditions.

Consider using shm_create_handle() instead of mmap_peer().

Returns:

0
Success.
-1
An error occurred (errno is set).

Errors:

EINTR
The call was interrupted by a signal.
EINVAL
The addresses in the specified range are outside the range allowed for the address space of a process.
ENOMEM
The memory manager failed to allocate memory to handle a user's munmap_peer() request. This allocation of memory is necessary for internal structures to represent the new state of mapped memory.
ESRCH
The process pid doesn't exist, is loading, or is terminating.

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes