public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 2.5.61/usb: poll does not time out
@ 2003-02-15 19:55 Andreas Jellinghaus
  0 siblings, 0 replies; only message in thread
From: Andreas Jellinghaus @ 2003-02-15 19:55 UTC (permalink / raw)
  To: linux-kernel

Hi,

poll() should return as soon as there is some event.
unplugging a usb device will cause poll to set
revents to POLLERR|POLLHUP.

But the poll() syscall is not returned, instead
the kernel waits for the timeout to count down /
in the case poll with a negative value to wait
forever. This way an application will never
notice that the usb device has been removed.

here is a strace on a test app.
the kernel waits full 10 seconds (the timeout used),
even though the usb device was removed in the first
five seconds.

send(4, "<15>Feb 15 20:47:52 usbtoken[947"..., 52, 0) = 52
rt_sigaction(SIGPIPE, {SIG_DFL}, NULL, 8) = 0
poll([{fd=3, events=POLLIN|POLLPRI|POLLOUT|POLLERR,
revents=POLLERR|POLLHUP}], 1, 10000) = 1
time([1045338482])                      = 1045338482
getpid()                                = 9477
writev(2, [{"usbtoken[9477]: device removed. "..., 41}],
1usbtoken[9477]: device removed. exiting.
) = 41
rt_sigaction(SIGPIPE, {0x400edf48, [], 0x4000000}, {SIG_DFL}, 8) = 0
send(4, "<15>Feb 15 20:48:02 usbtoken[947"..., 61, 0) = 61

was it meant to be that way?

if so: how can i work around this (in a nice way) ?

i could:
a) use short timeouts and a permanent loop (not nice)
b) use the hotplug script when it is called with "remove"
   to find the app with which has the device still open
   and kill the process / send some signal. also not nice.

Andreas




^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-02-15 19:42 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-02-15 19:55 2.5.61/usb: poll does not time out Andreas Jellinghaus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox