forked from Bananymous/banan-os
				
			Kernel: Allow any signal flags and support SA_RESETHAND
This commit is contained in:
		
							parent
							
								
									5940e912b3
								
							
						
					
					
						commit
						a51b589bc9
					
				|  | @ -2505,14 +2505,7 @@ namespace Kernel | ||||||
| 			*oact = m_signal_handlers[signal]; | 			*oact = m_signal_handlers[signal]; | ||||||
| 
 | 
 | ||||||
| 		if (act) | 		if (act) | ||||||
| 		{ |  | ||||||
| 			if (act->sa_flags & ~(SA_RESTART)) |  | ||||||
| 			{ |  | ||||||
| 				dwarnln("TODO: sigaction({}, {H})", signal, act->sa_flags); |  | ||||||
| 				return BAN::Error::from_errno(ENOTSUP); |  | ||||||
| 			} |  | ||||||
| 			m_signal_handlers[signal] = *act; | 			m_signal_handlers[signal] = *act; | ||||||
| 		} |  | ||||||
| 
 | 
 | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -507,9 +507,16 @@ namespace Kernel | ||||||
| 		bool has_sa_restart; | 		bool has_sa_restart; | ||||||
| 		{ | 		{ | ||||||
| 			SpinLockGuard _(m_process->m_signal_lock); | 			SpinLockGuard _(m_process->m_signal_lock); | ||||||
| 			ASSERT(!(m_process->m_signal_handlers[signal].sa_flags & SA_SIGINFO)); | 
 | ||||||
| 			signal_handler = (vaddr_t)m_process->m_signal_handlers[signal].sa_handler; | 			auto& handler = m_process->m_signal_handlers[signal]; | ||||||
| 			has_sa_restart = !!(m_process->m_signal_handlers[signal].sa_flags & SA_RESTART); | 
 | ||||||
|  | 			ASSERT(!(handler.sa_flags & SA_SIGINFO)); | ||||||
|  | 
 | ||||||
|  | 			signal_handler = reinterpret_cast<vaddr_t>(handler.sa_handler); | ||||||
|  | 			if (handler.sa_flags & SA_RESETHAND) | ||||||
|  | 				handler.sa_handler = SIG_DFL; | ||||||
|  | 
 | ||||||
|  | 			has_sa_restart = !!(handler.sa_flags & SA_RESTART); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		m_signal_pending_mask &= ~(1ull << signal); | 		m_signal_pending_mask &= ~(1ull << signal); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue