<div dir="ltr"><div>Hi,</div><div>I'm looking for some opinions on sanei_usb as to how best to clean up after it.</div><div><br></div><div>Backends that use sanei_usb call sanei_usb_init() to get things going before using the subsystem functions. However, it is not obvious who should call sanei_usb_exit().</div><div><br></div><div>sane_usb_init() is a NOP for all but the first invocation. So all sanei_usb users can and should call it before doing USB work. The same is true of sanei_usb_exit(). However, any of the backends could do sanei_usb cleanup work in their sane_exit() function, although they should probably make  sure that it is all gone during the last sane_close(). Any backend that previously called sanei_usb_exit() will make any USB cleanup work fail for subsequent backends' sane_exit(). <br></div><div><br></div><div>We have a mixed bag at the moment. Some backends call sanei_usb_exit() in their exit functions. However, many don't. We could remove all the sanei_usb_exit() functions from the backends and add it to the dll.c exit function to be executed after all backends have been unloaded. However, this feels bad because the init() and exit() functions are called at different levels in different contexts. A backend DLL could also be called without the aid of the dll helper layer so it would not properly clean up after itself. </div><div><br></div><div>The main issue it seems to me is that each backend doesn't have its own sanei_usb context and sanei_usb_init() doesn't "stack".</div><div><br></div><div>This has come about from recent testing that came from a user detecting leakage of resources here: <a href="https://gitlab.com/sane-project/backends/-/issues/788">https://gitlab.com/sane-project/backends/-/issues/788</a></div><div><br></div><div>Opinions sought.</div><div><br></div><div>Cheers,</div><div>Ralph<br></div><div><br></div><div><br></div></div>