|
@@ -1442,3 +1442,41 @@ rt_err_t lwp_pgrp_signal_kill(rt_processgroup_t pgrp, long signo, long code,
|
|
|
|
|
|
return rc;
|
|
|
}
|
|
|
+
|
|
|
+struct kill_all_param
|
|
|
+{
|
|
|
+ long signo;
|
|
|
+ long code;
|
|
|
+ lwp_siginfo_ext_t value;
|
|
|
+};
|
|
|
+
|
|
|
+static int _kill_each(pid_t pid, void *data)
|
|
|
+{
|
|
|
+ struct kill_all_param *param = data;
|
|
|
+ rt_lwp_t lwp;
|
|
|
+ rt_err_t error;
|
|
|
+
|
|
|
+ lwp = lwp_from_pid_locked(pid);
|
|
|
+ if (lwp && !lwp->sig_protected)
|
|
|
+ {
|
|
|
+ error = lwp_signal_kill(lwp, param->signo, param->code, param->value);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ error = RT_EOK;
|
|
|
+ }
|
|
|
+
|
|
|
+ return error;
|
|
|
+}
|
|
|
+
|
|
|
+rt_err_t lwp_signal_kill_all(long signo, long code, lwp_siginfo_ext_t value)
|
|
|
+{
|
|
|
+ struct kill_all_param buf =
|
|
|
+ {
|
|
|
+ .signo = signo,
|
|
|
+ .code = code,
|
|
|
+ .value = value,
|
|
|
+ };
|
|
|
+
|
|
|
+ return lwp_pid_for_each(_kill_each, &buf);
|
|
|
+}
|