mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	ServerSession: replace GetPointer with block copy for HLE translation
Do it in the same way as HLERequestContext::SleepClientThread callback and avoid unsafe GetPointer
This commit is contained in:
		
							parent
							
								
									36c8e1d7a9
								
							
						
					
					
						commit
						0a424b86d2
					
				
					 1 changed files with 7 additions and 6 deletions
				
			
		|  | @ -66,14 +66,13 @@ ResultCode ServerSession::HandleSyncRequest(SharedPtr<Thread> thread) { | ||||||
| 
 | 
 | ||||||
|     // If this ServerSession has an associated HLE handler, forward the request to it.
 |     // If this ServerSession has an associated HLE handler, forward the request to it.
 | ||||||
|     if (hle_handler != nullptr) { |     if (hle_handler != nullptr) { | ||||||
|         // TODO(wwylele): avoid GetPointer
 |         std::array<u32_le, IPC::COMMAND_BUFFER_LENGTH + 2 * IPC::MAX_STATIC_BUFFERS> cmd_buf; | ||||||
|         u32* cmd_buf = |  | ||||||
|             reinterpret_cast<u32*>(kernel.memory.GetPointer(thread->GetCommandBufferAddress())); |  | ||||||
| 
 |  | ||||||
|         Kernel::Process* current_process = thread->owner_process; |         Kernel::Process* current_process = thread->owner_process; | ||||||
|  |         kernel.memory.ReadBlock(*current_process, thread->GetCommandBufferAddress(), cmd_buf.data(), | ||||||
|  |                                 cmd_buf.size() * sizeof(u32)); | ||||||
| 
 | 
 | ||||||
|         Kernel::HLERequestContext context(this); |         Kernel::HLERequestContext context(this); | ||||||
|         context.PopulateFromIncomingCommandBuffer(cmd_buf, *current_process); |         context.PopulateFromIncomingCommandBuffer(cmd_buf.data(), *current_process); | ||||||
| 
 | 
 | ||||||
|         hle_handler->HandleSyncRequest(context); |         hle_handler->HandleSyncRequest(context); | ||||||
| 
 | 
 | ||||||
|  | @ -83,7 +82,9 @@ ResultCode ServerSession::HandleSyncRequest(SharedPtr<Thread> thread) { | ||||||
|         // put the thread to sleep then the writing of the command buffer will be deferred to the
 |         // put the thread to sleep then the writing of the command buffer will be deferred to the
 | ||||||
|         // wakeup callback.
 |         // wakeup callback.
 | ||||||
|         if (thread->status == Kernel::ThreadStatus::Running) { |         if (thread->status == Kernel::ThreadStatus::Running) { | ||||||
|             context.WriteToOutgoingCommandBuffer(cmd_buf, *current_process); |             context.WriteToOutgoingCommandBuffer(cmd_buf.data(), *current_process); | ||||||
|  |             kernel.memory.WriteBlock(*current_process, thread->GetCommandBufferAddress(), | ||||||
|  |                                      cmd_buf.data(), cmd_buf.size() * sizeof(u32)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue