forked from Bananymous/banan-os
				
			Kernel: cleanup sys_exec()
We now scope everyting so desctructors get called
This commit is contained in:
		
							parent
							
								
									ba9fa00947
								
							
						
					
					
						commit
						4d5b14753d
					
				|  | @ -314,6 +314,8 @@ namespace Kernel | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	BAN::ErrorOr<long> Process::sys_exec(BAN::StringView path, const char* const* argv, const char* const* envp) | 	BAN::ErrorOr<long> Process::sys_exec(BAN::StringView path, const char* const* argv, const char* const* envp) | ||||||
|  | 	{ | ||||||
|  | 		// NOTE: We scope everything for automatic deletion
 | ||||||
| 		{ | 		{ | ||||||
| 			BAN::Vector<BAN::String> str_argv; | 			BAN::Vector<BAN::String> str_argv; | ||||||
| 			for (int i = 0; argv && argv[i]; i++) | 			for (int i = 0; argv && argv[i]; i++) | ||||||
|  | @ -355,6 +357,7 @@ namespace Kernel | ||||||
| 			ASSERT(m_threads.size() == 1); | 			ASSERT(m_threads.size() == 1); | ||||||
| 			ASSERT(&Process::current() == this); | 			ASSERT(&Process::current() == this); | ||||||
| 
 | 
 | ||||||
|  | 			// allocate memory on the new process for arguments and environment
 | ||||||
| 			{ | 			{ | ||||||
| 				LockGuard _(page_table()); | 				LockGuard _(page_table()); | ||||||
| 
 | 
 | ||||||
|  | @ -379,13 +382,10 @@ namespace Kernel | ||||||
| 
 | 
 | ||||||
| 			m_userspace_info.argc = str_argv.size(); | 			m_userspace_info.argc = str_argv.size(); | ||||||
| 
 | 
 | ||||||
| 		// NOTE: These must be manually cleared since this function won't return after this point
 | 			asm volatile("cli"); | ||||||
| 		str_argv.clear(); |  | ||||||
| 		str_envp.clear(); |  | ||||||
| 
 |  | ||||||
| 		CriticalScope _; |  | ||||||
| 		lock_guard.~LockGuard(); |  | ||||||
| 			m_threads.front()->setup_exec(); | 			m_threads.front()->setup_exec(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		Scheduler::get().execute_current_thread(); | 		Scheduler::get().execute_current_thread(); | ||||||
| 		ASSERT_NOT_REACHED(); | 		ASSERT_NOT_REACHED(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue