[sane-devel] scanimage hangs at shutdown (Preparing for a sane-backends release)

Rolf Bensch rolf at bensch-online.de
Fri Aug 21 09:36:45 UTC 2015


Hi Olaf,

I removed atexit() from scanimage and comitted the patch last night.

Now scanimage doesn't hang anymore under OpenSuse with libusb-compat.

Cheers,
Rolf


Am 20.08.2015 um 01:09 schrieb Olaf Meeuwissen:
> Hi Rolf,
> 
> Rolf Bensch writes:
> 
>> Hi Olaf,
>>
>> Am 19.08.2015 um 03:27 schrieb Olaf Meeuwissen:
>>>
>>> Rolf Bensch writes:
>>>
>>>> Using fork or pthread makes no difference.
>>>>
>>>> A sleep at the end of main() works wonders.
>>>>
>>>> But not for the other exit() functions. 'scanimage -h' or 'scanimage -A'
>>>> still hang with the same issue.
>>>>
>>>> I suggest to replace atexit and all exit() functions by the existing
>>>> scanimage_exit() function.
>>>>
>>>> Please check if attached patch is running with your installations.
>>>
>>> I had a look at the patch and tripped over the fixme.  Next, I had a
>>> look at the scanimage_exit() implementation and the timing of adding
>>> that to the list of functions to call atexit.  Something definitely
>>> smells there.
>>>
>>>  - scanimage_exit() may call sane_close().  That function may need to do
>>>    device I/O.
>>>  - scanimage_exit() is register with atexit() *before* sane_init() gets
>>>    called.  This means that any functions registered via atexit() in a
>>>    backend run *before* scanimage_exit().
>>>  - none of the backends call atexit() directly but any library they use
>>>    may register exit handlers
>>>
>>> Is there any chance that the libusb-compat installations that are
>>> affected register an exit handler?  Say something like libusb_exit()?
>>> If that is the case, device I/O will be made impossible *before*
>>> scanimage_exit() gets a chance to sane_close() the device.
>>>
>>> Note that the -h and -A options to scanimage need the device's options
>>> so that just about guarantees that its backend needs to talk to it.
>>>
>>> Does moving the atexit() call *after* sane_init() fix this issue?
>>
>> Good idea, but it doesn't work. Many thanks for your help.
> 
> Too bad.  In that case your patch looks fine to me.
> 
> Hope this helps,
> 



More information about the sane-devel mailing list