[sane-devel] Microtek SANE bug and fix for ADF

Karsten Festag karsten.festag@t-online.de
Tue, 20 Nov 2001 22:21:07 +0100


Hi Maurice,

thank you very much for your bug report, I agree to Henning, this is the best kind
of bug report I can imagine.
I must admit that I never checked this killing part of the code, it is legacy from
the time before I started working on the microtek2 backend.

The problem with the stripes is known for the X12USL, I currently try to fix this
and I'm looking for some log of the data and commands that the windows driver
sends to the scanner. There are two users trying to get the Microtek Scanwizard
running with wine but I haven't any results yet. Hoping for the best :-). If you
have the possibility and the will to do this, please tell me, I will give you some
more information how I did this with my scanner (Phantom330CX).

Best regards,

Karsten


Maurice Hilarius wrote:

> If you have a Microtek or similar scanner with an automatic document feeder
> (ADF) then there is a bug in the SANE code for using this feeder device.
>
> We have been working with a Microtek ScanMaker X12USL, and ran into a
> problem with the code for the ADF handling.
> After a multi-page scan, it would crash you right out of X!
>
> As this is not a desirable feature, we have been looking into the reasons
> for this.
>
> Fortunately we have found it, and I include a patch at the end of this message.
>
> The problem is in the 'cancel_scan()' function in microtek2.c.
>
> When using the automatic document feeder, after it has scanned all the
> pages, and there are no more pages to scan, this function is called after
> an I/O error ir produced by the lack of a page to feed.
> It is then supposed to stop the scanner from trying to scan any more pages.
>
> A comment in the code says:
>
> "/* READ IMAGE with a transferlength of 0 aborts a scan */".
>
> This is fine, but then 'close(ms->fd[1])'  may be called
> ms->fd[1] equal to -1      (which does not have any nasty consequences,)
>
> BUT! a bit below that you effectively have 'kill(-1, SIGTERM);'.
>
> Try 'man 2 kill' to see what this does. :-)
>
> After this patch:
>
> --- sane-backends-1.0.5/backend/microtek2.c~    Sun May 27 04:20:20 2001
> +++ sane-backends-1.0.5/backend/microtek2.c     Mon Nov 19 19:11:05 2001
> @@ -1403,8 +1403,15 @@
>           status = SANE_STATUS_CANCELLED;
>
>       close(ms->fd[1]);
> -    kill(ms->pid, SIGTERM);
> -    waitpid(ms->pid, NULL, 0);
> +    /* if we are aborting a scan because, for example, we run out
> +       of material on a feeder, then pid may be already -1 and
> +       kill(-1, SIGTERM), i.e. killing all our processes, is not
> +       likely what we really want - --mj, 2001/Nov/19 */
> +    if (ms->pid > 1)
> +      {
> +       kill(ms->pid, SIGTERM);
> +       waitpid(ms->pid, NULL, 0);
> +      }
>
>       return status;
>   }
>
> With this revision of the code runs of batch scans using "ADF" settings
> terminate properly and without any other visible side-effects.
>
> I have no idea if other backends have similar problems; 'kill()' call
> is used in a number of places.
>
> Meanwhile, an other trivial trouble we see is that 'scanimage' without any
> explicitly specified format is still using an extension of '.pnm' even if
> '--format tiff' is given.
>
> For further excitement the manpage claims that "out%d.tif" is _always_ the
> default; at least in the presence of '--batch'.
>
> Perhaps this is related to the "features" of a given scanner,  but with the
> "ScanMaker X12USL", (while using the microtek2 backend), we are getting
> "stripes" on both sides of scanned images.
>
> '--backend-calibration' options, which some docs suggest may help with
> that, is listed by 'scanimage --help' as "[inactive]".
>
> Indeed, it seems to not make any difference.
>
> Does anyone have any suggestions or ideas for what to do with that problem?
>
> Maurice Hilarius and  Michal Jaegermann
>
> maurice@harddata.com
> michal@harddata.com
>
> With our best regards,
>
> Maurice W. Hilarius       Telephone: 01-780-456-9771
> Hard Data Ltd.               FAX:       01-780-456-9772
> 11060 - 166 Avenue        mailto:maurice@harddata.com
> Edmonton, AB, Canada      http://www.harddata.com/
>     T5X 1Y3
>
> _______________________________________________
> Sane-devel mailing list
> Sane-devel@www.mostang.com
> http://www.mostang.com/mailman/listinfo/sane-devel