Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 828b1f65 authored by Richard Weinberger's avatar Richard Weinberger Committed by Richard Weinberger
Browse files

Rip out get_signal_to_deliver()



Now we can turn get_signal() to the main function.

Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent 10b1c7ac
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ struct ksignal {
	int sig;
};

extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie);
extern int get_signal(struct ksignal *ksig);
extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping);
extern void exit_signals(struct task_struct *tsk);
extern void kernel_sigaction(int, __sighandler_t);
@@ -300,18 +300,6 @@ static inline void disallow_signal(int sig)
	kernel_sigaction(sig, SIG_IGN);
}

/*
 * Eventually that'll replace get_signal_to_deliver(); macro for now,
 * to avoid nastiness with include order.
 */
#define get_signal(ksig)					\
({								\
	struct ksignal *p = (ksig);				\
	p->sig = get_signal_to_deliver(&p->info, &p->ka,	\
					signal_pt_regs(), NULL);\
	p->sig > 0;						\
})

extern struct kmem_cache *sighand_cachep;

int unhandled_signal(struct task_struct *tsk, int sig);
+12 −11
Original line number Diff line number Diff line
@@ -2166,8 +2166,7 @@ static int ptrace_signal(int signr, siginfo_t *info)
	return signr;
}

int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
			  struct pt_regs *regs, void *cookie)
int get_signal(struct ksignal *ksig)
{
	struct sighand_struct *sighand = current->sighand;
	struct signal_struct *signal = current->signal;
@@ -2237,13 +2236,13 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
			goto relock;
		}

		signr = dequeue_signal(current, &current->blocked, info);
		signr = dequeue_signal(current, &current->blocked, &ksig->info);

		if (!signr)
			break; /* will return 0 */

		if (unlikely(current->ptrace) && signr != SIGKILL) {
			signr = ptrace_signal(signr, info);
			signr = ptrace_signal(signr, &ksig->info);
			if (!signr)
				continue;
		}
@@ -2251,13 +2250,13 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
		ka = &sighand->action[signr-1];

		/* Trace actually delivered signals. */
		trace_signal_deliver(signr, info, ka);
		trace_signal_deliver(signr, &ksig->info, ka);

		if (ka->sa.sa_handler == SIG_IGN) /* Do nothing.  */
			continue;
		if (ka->sa.sa_handler != SIG_DFL) {
			/* Run the handler.  */
			*return_ka = *ka;
			ksig->ka = *ka;

			if (ka->sa.sa_flags & SA_ONESHOT)
				ka->sa.sa_handler = SIG_DFL;
@@ -2307,7 +2306,7 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
				spin_lock_irq(&sighand->siglock);
			}

			if (likely(do_signal_stop(info->si_signo))) {
			if (likely(do_signal_stop(ksig->info.si_signo))) {
				/* It released the siglock.  */
				goto relock;
			}
@@ -2328,7 +2327,7 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,

		if (sig_kernel_coredump(signr)) {
			if (print_fatal_signals)
				print_fatal_signal(info->si_signo);
				print_fatal_signal(ksig->info.si_signo);
			proc_coredump_connector(current);
			/*
			 * If it was able to dump core, this kills all
@@ -2338,17 +2337,19 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
			 * first and our do_group_exit call below will use
			 * that value and ignore the one we pass it.
			 */
			do_coredump(info);
			do_coredump(&ksig->info);
		}

		/*
		 * Death signals, no core dump.
		 */
		do_group_exit(info->si_signo);
		do_group_exit(ksig->info.si_signo);
		/* NOTREACHED */
	}
	spin_unlock_irq(&sighand->siglock);
	return signr;

	ksig->sig = signr;
	return ksig->sig > 0;
}

/**