libfs: improve cleanup of shared file mappings
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include <magenta/handle.h>
|
||||
#include <magenta/log.h>
|
||||
#include <magenta/vm.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
static int create_file_mapping(
|
||||
@@ -57,6 +58,7 @@ static int create_file_mapping(
|
||||
return __errno_from_kern_status(status);
|
||||
}
|
||||
|
||||
mapping->m_ref = 1;
|
||||
mapping->m_file = f;
|
||||
mapping->m_vmo = vmo;
|
||||
|
||||
@@ -102,14 +104,19 @@ extern kern_status_t fs_msg_map(
|
||||
(flags & MAP_SHARED) ? "shared" : "private",
|
||||
mapping->m_vmo);
|
||||
|
||||
kern_handle_t vmo;
|
||||
kern_handle_transfer(
|
||||
kern_handle_t vmo = KERN_HANDLE_INVALID;
|
||||
kern_status_t status = kern_handle_transfer(
|
||||
KERN_HANDLE_INVALID,
|
||||
mapping->m_vmo,
|
||||
KERN_HANDLE_INVALID,
|
||||
KERN_HANDLE_INVALID,
|
||||
HANDLE_TRANSFER_COPY,
|
||||
&vmo);
|
||||
if (status != KERN_OK) {
|
||||
kern_tracef("kern_handle_transfer failed %d", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
f->f_ref++;
|
||||
|
||||
*out_err = SUCCESS;
|
||||
|
||||
Reference in New Issue
Block a user