Fix for overlooked device HUP with 'firewire' stack
When EPOLLHUP event is received in fw_loop_iterate(), it is or'd with EPOLLERR. The EPOLLHUP event was then overlooked in handle_device_event() with unpredictable-but-generally bad results. This problem has been rediscovered several times. http://thread.gmane.org/gmane.linux.kernel.firewire.devel/13330 http://thread.gmane.org/gmane.linux.kernel.firewire.devel/13779 Reported-by: B.J. Buchalter <bj@mhlabs.com> Reported-by: Michael Thireos <mthireos@vanteon.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
f806f3d0de
commit
b15039ceb8
2
src/fw.c
2
src/fw.c
|
@ -262,7 +262,7 @@ handle_device_event(raw1394handle_t handle,
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = device - fwhandle->devices;
|
i = device - fwhandle->devices;
|
||||||
if (events == EPOLLHUP)
|
if (events & EPOLLHUP)
|
||||||
return handle_lost_device(fwhandle, i);
|
return handle_lost_device(fwhandle, i);
|
||||||
|
|
||||||
len = read(fwhandle->devices[i].fd,
|
len = read(fwhandle->devices[i].fd,
|
||||||
|
|
Reference in New Issue