Fix mmap(2) and munmap(2) performance being extremely bad.
Now it's only very bad.
This commit is contained in:
parent
049232d475
commit
87b10f8d86
2 changed files with 11 additions and 13 deletions
|
@ -127,14 +127,9 @@ void UnmapMemory(Process* process, uintptr_t addr, size_t size)
|
|||
size_t conflict_index = conflict_offset / sizeof(struct segment);
|
||||
Memory::UnmapRange(conflict->addr, conflict->size, PAGE_USAGE_USER_SPACE);
|
||||
Memory::Flush();
|
||||
if ( conflict_index + 1 == process->segments_used )
|
||||
{
|
||||
process->segments_used--;
|
||||
continue;
|
||||
}
|
||||
process->segments[conflict_index] = process->segments[--process->segments_used];
|
||||
qsort(process->segments, process->segments_used,
|
||||
sizeof(struct segment), segmentcmp);
|
||||
process->segments_used--;
|
||||
for ( size_t i = conflict_index; i < process->segments_used; i++ )
|
||||
process->segments[i] = process->segments[i + 1];
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -96,11 +96,14 @@ bool AddSegment(Process* process, const struct segment* new_segment)
|
|||
}
|
||||
|
||||
// Add the new segment to the segment list.
|
||||
process->segments[process->segments_used++] = *new_segment;
|
||||
|
||||
// Sort the segment list after address.
|
||||
qsort(process->segments, process->segments_used, sizeof(struct segment),
|
||||
segmentcmp);
|
||||
size_t i = 0;
|
||||
while ( i < process->segments_used &&
|
||||
segmentcmp(&process->segments[i], new_segment) < 0 )
|
||||
i++;
|
||||
for ( size_t n = process->segments_used; i < n; n-- )
|
||||
process->segments[n] = process->segments[n - 1];
|
||||
process->segments[i] = *new_segment;
|
||||
process->segments_used++;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue