Libargus does not appear to be re-entrant when the process using it is suddenly halted.
This is particularily inconvenient when debugging an application. If we stop the debugger, without shutting down the library cleanly, libargus is not usable until the system is rebooted.
Ideally, we could step through a debugger at leisure, and terminate the process if necessary. Subsequent debug launches should be possible without a reboot.
Here is a very simple example force-terminating argus_camera to demonstrate, although the behaviour is the same terminating/halting a debugger for any libargus application. This is on R32.2, although the issue has been around for previous releases as well.
nvidia@jetson:/usr/src/tegra_multimedia_api/argus/apps/camera/ui/camera$ ./argus_camera &
[1] 7729
nvidia@jetson:/usr/src/tegra_multimedia_api/argus/apps/camera/ui/camera$ Executing Argus Sample Application (argus_camera)
Argus Version: 0.97.3 (multi-process)
sudo kill -9 7729
[sudo] password for nvidia:
[1] Killed
Application has been terminated, and we fail to re-launch until we reboot:
nvidia@jetson:/usr/src/tegra_multimedia_api/argus/apps/camera/ui/camera$ ./argus_camera &
[2] 7805
nvidia@jetson:/usr/src/tegra_multimedia_api/argus/apps/camera/ui/camera$ Executing Argus Sample Application (argus_camera)
(Argus) Error FileOperationFailed: Failed socket read: Connection reset by peer (in src/rpc/socket/common/SocketUtils.cpp, function readSocket(), line 79)
(Argus) Error FileOperationFailed: (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 215)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:823 Failed to create CameraProvider
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, Dispatcher:784 (propagating)
(Argus) Error FileOperationFailed: Connecting to nvargus-daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 201)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:823 Failed to create CameraProvider
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:807 Initalization failed
(Argus) Error FileOperationFailed: Connecting to nvargus-daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 201)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:823 Failed to create CameraProvider
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:807 Initalization failed
(Argus) Error FileOperationFailed: Connecting to nvargus-daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 201)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:823 Failed to create CameraProvider
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:807 Initalization failed
(Argus) Error FileOperationFailed: Connecting to nvargus-daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 201)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:823 Failed to create CameraProvider
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:807 Initalization failed
(Argus) Error FileOperationFailed: Connecting to nvargus-daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 201)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:823 Failed to create CameraProvider
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:807 Initalization failed
(Argus) Error FileOperationFailed: Connecting to nvargus-daemon failed: Connection refused (in src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 201)
(Argus) Error FileOperationFailed: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, initialize:823 Failed to create CameraProvider
Error generated. /usr/src/tegra_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp, getInstance:807 Initalization failed
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid