Hi Rajat, On Tue, Jan 11, 2011 at 9:26 PM, Rajat Sharma <fs.rajat@xxxxxxxxx> wrote: > Hi Dave, > > My understanding was based out of linux/errno.h. Maybe the below > comment is in context of glibc abstracting out ERESTART* error codes. > > #ifdef __KERNEL__ > > /* > * These should never be seen by user programs. To return one of ERESTART* > * codes, signal_pending() MUST be set. Note that ptrace can observe these > * at syscall exit tracing, but they will never be left for the debugged user > * process to see. > */ > #define ERESTARTSYS 512 > #define ERESTARTNOINTR 513 > #define ERESTARTNOHAND 514 /* restart if no handler.. */ > #define ENOIOCTLCMD 515 /* No ioctl command */ > #define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */ Yeah - that's consistent with my understanding. The code flow would be something like this user-mode program calls ioctl ioctl does some stuff signal happens ioctl detects signal (typically by a call returning -EINTR) and decides to return -ERESTARTSYS sys handler detects pending signal user-mode signal handler is called sys handler re-issues ioctl ioctl does some stuff ioctl returns normally user mode program sees normal reutrn code So ioctl returns -ERESTARTSYS, but the user mode program is completely oblivious to the fact that this happened. glibc doesn't even get to know that the -ERESTARTSYS code was returned by ioctl. It gets intercepted and processed by the kernel. Dave Hylands _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies