// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2019 Facebook
#include <linux/bpf.h>
#include <linux/version.h>
#include <bpf/bpf_helpers.h>

__u32 sig = 0, pid = 0, status = 0, signal_thread = 0;

static __always_inline int bpf_send_signal_test(void *ctx)
{
	int ret;

	if (status != 0 || sig == 0 || pid == 0)
		return 0;

	if ((bpf_get_current_pid_tgid() >> 32) == pid) {
		if (signal_thread)
			ret = bpf_send_signal_thread(sig);
		else
			ret = bpf_send_signal(sig);
		if (ret == 0)
			status = 1;
	}

	return 0;
}

SEC("tracepoint/syscalls/sys_enter_nanosleep")
int send_signal_tp(void *ctx)
{
	return bpf_send_signal_test(ctx);
}

SEC("perf_event")
int send_signal_perf(void *ctx)
{
	return bpf_send_signal_test(ctx);
}

char __license[] SEC("license") = "GPL";
