Page MenuHomeFreeBSD

D60005.id187643.diff
No OneTemporary

D60005.id187643.diff

diff --git a/sys/compat/linux/linux_event.c b/sys/compat/linux/linux_event.c
--- a/sys/compat/linux/linux_event.c
+++ b/sys/compat/linux/linux_event.c
@@ -376,7 +376,6 @@
NULL};
cap_rights_t rights;
struct file *epfp;
- sigset_t omask;
int error;
if (maxevents <= 0 || maxevents > LINUX_MAX_EVENTS)
@@ -392,16 +391,10 @@
}
if (uset != NULL) {
error = kern_sigprocmask(td, SIG_SETMASK, uset,
- &omask, 0);
+ &td->td_oldsigmask, 0);
if (error != 0)
goto leave;
td->td_pflags |= TDP_OLDMASK;
- /*
- * Make sure that ast() is called on return to
- * usermode and TDP_OLDMASK is cleared, restoring old
- * sigmask.
- */
- ast_sched(td, TDA_SIGSUSPEND);
}
coargs.leventlist = events;
@@ -420,9 +413,17 @@
if (error == 0)
td->td_retval[0] = coargs.count;
- if (uset != NULL)
- error = kern_sigprocmask(td, SIG_SETMASK, &omask,
- NULL, 0);
+ if (uset != NULL) {
+ /*
+ * Make sure that ast() is called on return to
+ * usermode and TDP_OLDMASK is cleared, restoring old
+ * sigmask.
+ */
+ if (error == EINTR)
+ ast_sched(td, TDA_SIGSUSPEND);
+ else
+ ast_sched(td, TDA_PSELECT);
+ }
leave:
fdrop(epfp, td);
return (error);

File Metadata

Mime Type
text/plain
Expires
Sat, Sep 26, 9:11 AM (2 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39635013
Default Alt Text
D60005.id187643.diff (1 KB)

Event Timeline