lkml.org 
[lkml]   [2003]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Subject2.5.61/usb: poll does not time out
From
Date
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



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:33    [W:0.596 / U:0.024 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site