[sane-devel] Patch to make XSane work with SANE 1.1
Julien BLACHE
jb at jblache.org
Tue Oct 7 20:35:37 UTC 2008
stef <stef.dev at free.fr> wrote:
Hi,
>> Please, tell me this is not busy-looping on sane_start() ...
>
> sorry can't tell you that. It is indeed doing busy-looping. While it works
> fine with the pnm backend and the rts8891 which handles warming-up, adding a
> sleep() in the loop would be better. However, this will have to be replaced
> with some dialog box, which is the reason there is a SANE_STATUS_WARMING_UP.
> It is currently a quick fix to make XSane work with SANE 1.1.
The problem is that the dialog box will hardly alleviate the need to
poll for the scanner status by calling sane_start() repeatedly.
Also sleeping is never a good idea as in some cases you'll just end up
chewing CPU as if you were busy-looping (and chewing CPU means taking
CPU time away from other, well-behaved processes). If the delay is
long enough you can sched_yield(), but the effects vary greatly
depending on the scheduler and the load on the machine.
If a frontend now has to poll for the status of the scanner, then
there should be a way to do so properly, without having to rely on
busy-looping.
The interface here is not good enough; it's not going to work well for
scanners that need 30+ seconds to warm up like my 2480 does.
Also for XSane, at a minimum, the code should be like
do
{
while (gtk_events_pending())
gtk_main_iteration();
status = sane_start(dev);
} while (status == SANE_STATUS_WARMING_UP);
Otherwise the GUI will break in an ugly, 1990 kind of way.
JB.
--
Julien BLACHE <http://www.jblache.org>
<jb at jblache.org> GPG KeyID 0xF5D65169
More information about the sane-devel
mailing list