不调用 libusb_exit() 的后果是什么

What are consequences of not calling libusb_exit()

我正在编写一个与 USB 视频播放控制器交互的用户空间程序。我正在用 C++ 编程,该程序旨在 运行 on Linux。在研究 libusb 手册时,我遇到了 void libusb_exit ( struct libusb_context * ctx ) 函数。

描述says

Deinitialize libusb.

Should be called after closing all open devices and before your application terminates.

手册没有解释为什么需要它。我开始好奇在没有调用 libusb_exit() 的情况下终止一个已经初始化并使用了 libusb 的程序的后果。有人可以解释如果由于某些原因我的程序在终止前无法调用 libusb_exit() 会发生什么坏事吗?会不会导致系统资源泄露?

涉及上下文

就您的单个用户应用程序而言,您通常最终会使用默认上下文。每当用户的会话被销毁时,它就会死亡,这可能是您的应用程序要关闭的时候。
另请注意,如果您的应用程序 崩溃 ,您不能仅仅因为您不调用 libusb_exit 就泄漏(好吧,即使可能发生泄漏,泄漏的内存也会被释放崩溃后立即,所以我不会关心崩溃本身的原因)。

只要有多个会话就会出现问题。
有关详细信息,请参阅 here and here
如果在这种情况下调用 libusb_exit 失败,并且会话处于 released 状态,从您的应用程序的角度来看,您肯定会泄漏内存,因为上下文实际上不会被 libusb 破坏。事实上,在这种情况下,软件并没有被关闭,但内存仍在使用中,并且不再可用,因为你没有调用 libusb_exit 来释放它。

这就是为什么文档建议每次要销毁上下文时调用 libusb_exit,无论是否是默认上下文。