Skip to content

Commit af83c62

Browse files
committed
feat(Lib/signal): pidfd_send_signal
1 parent f927ce1 commit af83c62

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

src/pylib/Lib/signal_impl/signal_util.nim

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import ../../private/iph_utils
2+
import ../../pyconfig/ver
3+
import ./siginfo_decl
24
import ./[state, chk_util, pylifecycle, pynsig, c_api]
35

46
when HAVE_STRSIGNAL:
@@ -55,3 +57,15 @@ proc raise_signal*(signalnum: int) =
5557
if err != 0:
5658
raiseErrno()
5759
PyErr_CheckSignalsAndRaises()
60+
61+
when defined(linux) and not (
62+
defined(android) and ANDROID_API < 31):
63+
proc syscall(sysno: cint): cint {.varargs, importc: "syscall", header: "<sys/syscall.h>".}
64+
let NR_pidfd_send_signal{.importc: "__NR_pidfd_send_signal", header: "<unistd.h>".}: cint
65+
# SYS_pidfd_send_signal is its newer name
66+
proc pidfd_send_signal*(pid: int, sig: int,
67+
siginfo: struct_siginfo = nil, flags = 0) =
68+
let pid = cint(pid)
69+
let sig = cint(sig)
70+
if syscall(NR_pidfd_send_signal, pid, sig, nil, flags) < 0:
71+
raiseErrno()

src/pylib/pyconfig/util.nim

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

22

33
import std/os
4-
from std/strutils import parseInt
5-
4+
from std/strutils import parseInt, strip
5+
import std/macros
66

77
const weirdTarget = defined(js) or defined(nimscript)
88

@@ -60,6 +60,13 @@ template from_c_int*(variable; defval: int; precode): int =
6060
let variable{.importc, nodecl.}: cint
6161
stdout.write variable
6262

63+
macro from_c_int_underlined*(variable: static[string]; defval: int): int =
64+
let pureVar = variable.strip(chars = {'_'})
65+
let pureVarId = newLit pureVar
66+
result = quote do:
67+
from_c_int(`variable`, `defval`):
68+
{.emit: ["/*VARSECTION*/\n#define ", `pureVarId`, " ", `variable`].}
69+
6370
template from_c_int*(variable; includeFile: static[string], defval = low(int)): int =
6471
## we know int.low is smaller than low(cint)
6572
bind handle_int_or_strint

src/pylib/pyconfig/ver.nim

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
3+
when defined(android):
4+
import ./util
5+
const ANDROID_API* = from_c_int_underlined("__ANDROID_API__", 0)
6+
else:
7+
const ANDROID_API* = 0

0 commit comments

Comments
 (0)