summaryrefslogtreecommitdiff
path: root/sys/src/libthread/kill.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-12-07 14:33:51 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2020-12-07 14:33:51 +0100
commitb3c9249500d1f6f2df42c1543c4deb87789510b5 (patch)
tree68c800f62a1d0ac2ce06efbffcb94e5ab6b49127 /sys/src/libthread/kill.c
parenta92ffdbbfb3157d6fef23e3a8901c7ecdea68f1b (diff)
parent4d22dbb0f5a0cd4d3202a01a8cc18b632b5c9b01 (diff)
merge
Diffstat (limited to 'sys/src/libthread/kill.c')
-rw-r--r--sys/src/libthread/kill.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/sys/src/libthread/kill.c b/sys/src/libthread/kill.c
index 9160df016..e7292437c 100644
--- a/sys/src/libthread/kill.c
+++ b/sys/src/libthread/kill.c
@@ -76,24 +76,31 @@ threadint(int id)
threadxxx(id, 0);
}
-static void
-tinterrupt(Proc *p, Thread *t)
+static int
+writeprocctl(int pid, char *ctl)
{
- char buf[64];
+ char buf[32];
int fd;
+ snprint(buf, sizeof(buf), "/proc/%lud/ctl", (ulong)pid);
+ fd = open(buf, OWRITE|OCEXEC);
+ if(fd < 0)
+ return -1;
+ if(write(fd, ctl, strlen(ctl)) < 0){
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ return 0;
+}
+
+static void
+tinterrupt(Proc *p, Thread *t)
+{
switch(t->state){
case Running:
- snprint(buf, sizeof(buf), "/proc/%d/ctl", p->pid);
- fd = open(buf, OWRITE|OCEXEC);
- if(fd >= 0){
- if(write(fd, "interrupt", 9) == 9){
- close(fd);
- break;
- }
- close(fd);
- }
- postnote(PNPROC, p->pid, "threadint");
+ if(writeprocctl(p->pid, "interrupt") < 0)
+ postnote(PNPROC, p->pid, "threadint");
break;
case Rendezvous:
_threadflagrendez(t);