On Thu, Dec 11, 2008 at 04:36:47PM -0500, m. allan noah wrote: > >> However, sanei_usb_init() is only > >> called by backends in sane_init() and sane_get_devices(). A frontend > >> will only call sane_init() once, so that is not a problem, and the > >> sane standard says this about sane_get_devices(): > >> > >> The returned list is guaranteed to remain unchanged and valid until > >> (a) another call to this function is performed or (b) a call to > >> sane_exit() is performed. > > > > This don't says calling sane_get_devices will or should break any > > already opened device. > > That is strongly implied. Why else would it bother to guarantee only > half of the cycle?
Unfortunately it is not implied at all. What we read at SANE spec: | http://www.sane-project.org/html/doc013.html | Function sane_get_devices() can be called any time after sane_init() | has been called. But yes, probably most meaningful is to call it once before sane_open. But even in scanimage -h it is called after sane_open, and while it is still opened. > >> However, you have a valid point that most backends only call > >> sanei_usb_init() in sane_init(), and I think that should change. > > > > In backend I'm writing I call sanei_usb_init multiple times (in each > > sane_get_devices) only if I don't have opened devices. I think that's ok. > > Unfortunately, that is not enough. if a person has another brand of > scanner on their machine, alongside yours, and they open the other > scanner and then call sane_get_devices(), your backend won't know. > Then you will blast the list with the other backend's open device in > it. You are right.
