aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/thread.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-08-04 01:19:01 -0400
committerGitHub <noreply@github.com>2018-08-04 01:19:01 -0400
commit26a909372612ee7407004882b88a8a3a47f7300f (patch)
tree8732faeb184c2ce4a3b0b37bfd051dee136ff759 /src/core/hle/kernel/thread.cpp
parent46db65403f31aeb60bae8a8d4e6a2bd5fc3545a3 (diff)
parent6f3a3ed8c5a786d14f0238c21f1442fbb0397583 (diff)
Merge pull request #917 from lioncash/crash
kernel/thread: Fix potential crashes introduced in 3bcf090d
Diffstat (limited to 'src/core/hle/kernel/thread.cpp')
-rw-r--r--src/core/hle/kernel/thread.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index ea9554cbb5..b9022feae2 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -339,6 +339,17 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
tls_slots.emplace_back(0); // The page is completely available at the start
available_page = tls_slots.size() - 1;
available_slot = 0; // Use the first slot in the new page
+
+ // Allocate some memory from the end of the linear heap for this region.
+ const size_t offset = thread->tls_memory->size();
+ thread->tls_memory->insert(thread->tls_memory->end(), Memory::PAGE_SIZE, 0);
+
+ auto& vm_manager = owner_process->vm_manager;
+ vm_manager.RefreshMemoryBlockMappings(thread->tls_memory.get());
+
+ vm_manager.MapMemoryBlock(Memory::TLS_AREA_VADDR + available_page * Memory::PAGE_SIZE,
+ thread->tls_memory, 0, Memory::PAGE_SIZE,
+ MemoryState::ThreadLocal);
}
// Mark the slot as used