mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	Added a framework for partially handling Session disconnections.
Further implementation will happen in a future commit. Fixes a regression.
This commit is contained in:
		
							parent
							
								
									f9bcf89510
								
							
						
					
					
						commit
						386112da32
					
				
					 8 changed files with 67 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -174,6 +174,7 @@ void File::HandleSyncRequestImpl(Kernel::SharedPtr<Kernel::ServerSession> server
 | 
			
		|||
    case FileCommand::OpenLinkFile: {
 | 
			
		||||
        LOG_WARNING(Service_FS, "(STUBBED) File command OpenLinkFile %s", GetName().c_str());
 | 
			
		||||
        auto sessions = Kernel::ServerSession::CreateSessionPair(GetName(), shared_from_this());
 | 
			
		||||
        ClientConnected(std::get<Kernel::SharedPtr<Kernel::ServerSession>>(sessions));
 | 
			
		||||
        cmd_buff[3] = Kernel::g_handle_table.Create(std::get<Kernel::SharedPtr<Kernel::ClientSession>>(sessions)).ValueOr(INVALID_HANDLE);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,6 +73,7 @@ static void OpenFile(Service::Interface* self) {
 | 
			
		|||
    if (file_res.Succeeded()) {
 | 
			
		||||
        std::shared_ptr<File> file = *file_res;
 | 
			
		||||
        auto sessions = ServerSession::CreateSessionPair(file->GetName(), file);
 | 
			
		||||
        file->ClientConnected(std::get<Kernel::SharedPtr<Kernel::ServerSession>>(sessions));
 | 
			
		||||
        cmd_buff[3] = Kernel::g_handle_table.Create(std::get<Kernel::SharedPtr<Kernel::ClientSession>>(sessions)).MoveFrom();
 | 
			
		||||
    } else {
 | 
			
		||||
        cmd_buff[3] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -135,6 +136,7 @@ static void OpenFileDirectly(Service::Interface* self) {
 | 
			
		|||
    if (file_res.Succeeded()) {
 | 
			
		||||
        std::shared_ptr<File> file = *file_res;
 | 
			
		||||
        auto sessions = ServerSession::CreateSessionPair(file->GetName(), file);
 | 
			
		||||
        file->ClientConnected(std::get<Kernel::SharedPtr<Kernel::ServerSession>>(sessions));
 | 
			
		||||
        cmd_buff[3] = Kernel::g_handle_table.Create(std::get<Kernel::SharedPtr<Kernel::ClientSession>>(sessions)).MoveFrom();
 | 
			
		||||
    } else {
 | 
			
		||||
        cmd_buff[3] = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -398,6 +400,7 @@ static void OpenDirectory(Service::Interface* self) {
 | 
			
		|||
    if (dir_res.Succeeded()) {
 | 
			
		||||
        std::shared_ptr<Directory> directory = *dir_res;
 | 
			
		||||
        auto sessions = ServerSession::CreateSessionPair(directory->GetName(), directory);
 | 
			
		||||
        directory->ClientConnected(std::get<Kernel::SharedPtr<Kernel::ServerSession>>(sessions));
 | 
			
		||||
        cmd_buff[3] = Kernel::g_handle_table.Create(std::get<Kernel::SharedPtr<Kernel::ClientSession>>(sessions)).MoveFrom();
 | 
			
		||||
    } else {
 | 
			
		||||
        LOG_ERROR(Service_FS, "failed to get a handle for directory type=%d size=%d data=%s",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue