Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2023-01-09 20:02:14 +0300
committerCorinna Vinschen <corinna@vinschen.de>2023-01-09 20:02:14 +0300
commit9ee1e1b693ad7785e07f126ec725279fe605d621 (patch)
tree0b4f573f5a3a499beca7361b05758cfdd225c90f /winsup/cygwin/pinfo.cc
parent7886327fbf92e6ad8bd3f27ea9fa8bd54cc44bdd (diff)
Cygwin: /proc/<PID>/status: simplify code generating signal info
The code generating the signal info in _pinfo::siginfo() and in commune_process() are doing the same thing. Create a local static function commune_process_siginfo() to have the code in one place only. Remove a useless sigpending() call. Fixes: 9a3c058f6612 ("Cygwin: /proc/<PID>/status: Fill SigPnd, SigBlk and SigIgn values with life") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/pinfo.cc')
-rw-r--r--winsup/cygwin/pinfo.cc42
1 files changed, 21 insertions, 21 deletions
diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc
index 586a4204d..ff10d9cf8 100644
--- a/winsup/cygwin/pinfo.cc
+++ b/winsup/cygwin/pinfo.cc
@@ -603,6 +603,19 @@ _pinfo::alive ()
return !!h;
}
+static commune_result
+commune_process_siginfo ()
+{
+ commune_result res = { 0 };
+
+ res.pnd = sig_send (myself, __SIGPENDINGALL, NULL);
+ res.blk = cygheap->compute_sigblkmask ();
+ for (int sig = 1; sig < NSIG; ++sig)
+ if (global_sigs[sig].sa_handler == SIG_IGN)
+ res.ign |= SIGTOMASK (sig);
+ return res;
+}
+
DWORD
commune_process (void *arg)
{
@@ -679,13 +692,7 @@ commune_process (void *arg)
case PICOM_SIGINFO:
{
sigproc_printf ("processing PICOM_SIGINFO");
- commune_result cr;
- sigpending (&cr.pnd);
- cr.pnd = sig_send (myself, __SIGPENDINGALL, NULL);
- cr.blk = cygheap->compute_sigblkmask ();
- for (int sig = 1; sig < NSIG; ++sig)
- if (global_sigs[sig].sa_handler == SIG_IGN)
- cr.ign |= SIGTOMASK (sig);
+ commune_result cr = commune_process_siginfo ();
if (!WritePipeOverlapped (tothem, &cr, sizeof cr, &nr, 1000L))
sigproc_printf ("WritePipeOverlapped siginfo failed, %E");
break;
@@ -1026,24 +1033,17 @@ _pinfo::root (size_t& n)
int
_pinfo::siginfo (sigset_t &pnd, sigset_t &blk, sigset_t &ign)
{
+ commune_result cr;
+
if (!pid)
return -1;
if (pid != myself->pid && !ISSTATE (this, PID_NOTCYGWIN))
- {
- commune_result cr = commune_request (PICOM_SIGINFO);
- pnd = cr.pnd;
- blk = cr.blk;
- ign = cr.ign;
- }
+ cr = commune_request (PICOM_SIGINFO);
else
- {
- pnd = sig_send (myself, __SIGPENDINGALL, NULL);
- blk = cygheap->compute_sigblkmask ();
- ign = 0;
- for (int sig = 1; sig < NSIG; ++sig)
- if (global_sigs[sig].sa_handler == SIG_IGN)
- ign |= SIGTOMASK (sig);
- }
+ cr = commune_process_siginfo ();
+ pnd = cr.pnd;
+ blk = cr.blk;
+ ign = cr.ign;
return -1;
}