The other problem I am facing that read from socket returns with ENODATA when resuming. any ideas?
-----Original Message----- From: Rafael J. Wysocki [mailto:[EMAIL PROTECTED] Sent: Friday, July 20, 2007 3:10 PM To: Agarwal, Lomesh Cc: [EMAIL PROTECTED]; linux-kernel@vger.kernel.org Subject: Re: which signal is sent to freeze process? On Friday, 20 July 2007 20:07, Agarwal, Lomesh wrote: > Can you suggest a way I can debug the issue why I am getting EINTR error > for system calls in resuming? What else can cause the system call > failure with EINTR? Well, I think I know what the problem is. do_poll checks signal_pending(current) and breaks when it's set, but that may be caused by the freezer. You may try the patch below (untested) and see if that helps. Greetings, Rafael --- fs/select.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) Index: linux-2.6.22-rc6-mm1/fs/select.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/fs/select.c +++ linux-2.6.22-rc6-mm1/fs/select.c @@ -23,6 +23,7 @@ #include <linux/file.h> #include <linux/fs.h> #include <linux/rcupdate.h> +#include <linux/freezer.h> #include <asm/uaccess.h> @@ -593,6 +594,8 @@ static int do_poll(unsigned int nfds, s struct poll_list *walk; long __timeout; + try_to_freeze(); + set_current_state(TASK_INTERRUPTIBLE); for (walk = list; walk != NULL; walk = walk->next) { struct pollfd * pfd, * pfd_end; @@ -618,7 +621,8 @@ static int do_poll(unsigned int nfds, s * a poll_table to them on the next loop iteration. */ pt = NULL; - if (count || !*timeout || signal_pending(current)) + if (count || !*timeout || + (signal_pending(current) && !freezing(current))) break; count = wait->error; if (count) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/