Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
6f217d8c
Commit
6f217d8c
authored
Sep 13, 2004
by
Richard Henderson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ALPHA] Arrange to return EINTR for sigsuspend on signal path.
parent
cbc319f3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
4 deletions
+14
-4
arch/alpha/kernel/signal.c
arch/alpha/kernel/signal.c
+14
-4
No files found.
arch/alpha/kernel/signal.c
View file @
6f217d8c
...
...
@@ -145,7 +145,7 @@ sys_rt_sigaction(int sig, const struct sigaction __user *act,
* Atomically swap in the new signal mask, and wait for a signal.
*/
asmlinkage
int
do_sigsuspend
(
old_sigset_t
mask
,
struct
pt_regs
*
reg
,
struct
switch_stack
*
sw
)
do_sigsuspend
(
old_sigset_t
mask
,
struct
pt_regs
*
reg
s
,
struct
switch_stack
*
sw
)
{
sigset_t
oldset
;
...
...
@@ -156,17 +156,22 @@ do_sigsuspend(old_sigset_t mask, struct pt_regs *reg, struct switch_stack *sw)
recalc_sigpending
();
spin_unlock_irq
(
&
current
->
sighand
->
siglock
);
/* Indicate EINTR on return from any possible signal handler,
which will not come back through here, but via sigreturn. */
regs
->
r0
=
EINTR
;
regs
->
r19
=
1
;
while
(
1
)
{
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule
();
if
(
do_signal
(
&
oldset
,
reg
,
sw
,
0
,
0
))
if
(
do_signal
(
&
oldset
,
reg
s
,
sw
,
0
,
0
))
return
-
EINTR
;
}
}
asmlinkage
int
do_rt_sigsuspend
(
sigset_t
__user
*
uset
,
size_t
sigsetsize
,
struct
pt_regs
*
reg
,
struct
switch_stack
*
sw
)
struct
pt_regs
*
reg
s
,
struct
switch_stack
*
sw
)
{
sigset_t
oldset
,
set
;
...
...
@@ -183,10 +188,15 @@ do_rt_sigsuspend(sigset_t __user *uset, size_t sigsetsize,
recalc_sigpending
();
spin_unlock_irq
(
&
current
->
sighand
->
siglock
);
/* Indicate EINTR on return from any possible signal handler,
which will not come back through here, but via sigreturn. */
regs
->
r0
=
EINTR
;
regs
->
r19
=
1
;
while
(
1
)
{
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule
();
if
(
do_signal
(
&
oldset
,
reg
,
sw
,
0
,
0
))
if
(
do_signal
(
&
oldset
,
reg
s
,
sw
,
0
,
0
))
return
-
EINTR
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment