Tenho uma impressora/copiadora/scanner Samsung SCX-3205 muito antiga. Ela escaneia bem e funciona bem. NO ENTANTO, quando imprimo com o CUPS, ela para de escanear. "scanimage -L" informa na primeira execução após a impressão que o dispositivo ainda está lá, mas na próxima execução ele não consegue mais encontrá-lo.
Fiz um strace, veja as diferenças:
Caso não funcional:
ppoll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLOUT}], 3, {tv_sec=60, tv_nsec=0}, NULL, 8) = 1 ([{fd=6, revents=POLLIN}], left {tv_sec=59, tv_nsec=4341630})
ioctl(8, USBDEVFS_DISCARDURB, 0x55933dbfb0) = 0
timerfd_settime(6, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0
ppoll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLOUT}], 3, {tv_sec=60, tv_nsec=0}, NULL, 8) = 1 ([{fd=8, revents=POLLOUT}], left {tv_sec=59, tv_nsec=999980518})
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7fc9c97a50) = 0
timerfd_settime(6, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7fc9c97a50) = -1 EAGAIN (Resource temporarily unavailable)
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7fc9c97cb4) = 0
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7fc9c97eb4) = 0
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7fc9c97eb4) = 0
ioctl(8, USBDEVFS_RELEASEINTERFACE, 0x7fc9c97e5c) = 0
Caso de trabalho:
ppoll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLOUT}], 3, {tv_sec=60, tv_nsec=0}, NULL, 8) = 1 ([{fd=8, revents=POLLOUT}], left {tv_sec=59, tv_nsec=999981204})
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7ff3d45d80) = 0
timerfd_settime(6, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7ff3d45d80) = -1 EAGAIN (Resource temporarily unavailable)
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7ff3d461e4) = 0
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7ff3d461e4) = 0
ioctl(8, USBDEVFS_RELEASEINTERFACE, 0x7ff3d4618c) = 0
Então posso ver que há ppoll extra ("fd=6, revents=POLLIN") na mistura para o caso de falha. FD é daqui:
timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC|TFD_NONBLOCK) = 6
Estou executando um Alpine Linux 3.15.0 no Raspberry Pi 4 Modelo B Rev 1.1.