summaryrefslogtreecommitdiffstats
path: root/queue/Staging-comedi-fix-signal-handling-in-read-and-write.patch
diff options
context:
space:
mode:
Diffstat (limited to 'queue/Staging-comedi-fix-signal-handling-in-read-and-write.patch')
-rw-r--r--queue/Staging-comedi-fix-signal-handling-in-read-and-write.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/queue/Staging-comedi-fix-signal-handling-in-read-and-write.patch b/queue/Staging-comedi-fix-signal-handling-in-read-and-write.patch
new file mode 100644
index 0000000..f9ac7e0
--- /dev/null
+++ b/queue/Staging-comedi-fix-signal-handling-in-read-and-write.patch
@@ -0,0 +1,51 @@
+From 15ae44b83e09f5200d30d3a7a3cb595824438fb5 Mon Sep 17 00:00:00 2001
+From: Federico Vaga <federico.vaga@gmail.com>
+Date: Sat, 29 Oct 2011 09:47:39 +0200
+Subject: [PATCH 13/24] Staging: comedi: fix signal handling in read and write
+
+commit 6a9ce6b654e491981f6ef7e214cbd4f63e033848 upstream.
+
+After sleeping on a wait queue, signal_pending(current) should be
+checked (not before sleeping).
+
+Acked-by: Alessandro Rubini <rubini@gnudd.com>
+Signed-off-by: Federico Vaga <federico.vaga@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+---
+ drivers/staging/comedi/comedi_fops.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
+index 48ac52b..f6a0e76 100644
+--- a/drivers/staging/comedi/comedi_fops.c
++++ b/drivers/staging/comedi/comedi_fops.c
+@@ -1594,11 +1594,11 @@ static ssize_t comedi_write(struct file *file, const char *buf, size_t nbytes,
+ retval = -EAGAIN;
+ break;
+ }
++ schedule();
+ if (signal_pending(current)) {
+ retval = -ERESTARTSYS;
+ break;
+ }
+- schedule();
+ if (!s->busy)
+ break;
+ if (s->busy != file) {
+@@ -1701,11 +1701,11 @@ static ssize_t comedi_read(struct file *file, char *buf, size_t nbytes,
+ retval = -EAGAIN;
+ break;
+ }
++ schedule();
+ if (signal_pending(current)) {
+ retval = -ERESTARTSYS;
+ break;
+ }
+- schedule();
+ if (!s->busy) {
+ retval = 0;
+ break;
+--
+1.7.12.1
+