From 203063d83d0005e33dce2c2020f88d6d49de9851 Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan.grewe@g-node.org>
Date: Mon, 4 Mar 2024 16:54:33 +0100
Subject: [PATCH] fix nullptr exception on camera disconnect

---
 camerapreview.cpp |  2 +-
 pylonrecorder.cpp | 15 +++++++++------
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/camerapreview.cpp b/camerapreview.cpp
index 44eed6a..dbaf577 100644
--- a/camerapreview.cpp
+++ b/camerapreview.cpp
@@ -199,6 +199,6 @@ CameraPreview::~CameraPreview(){
         delete camera;
         camera = nullptr;
     }
-    qDebug() << "preview: deleted camera";
+    qDebug() << "deleted camera";
 
 }
\ No newline at end of file
diff --git a/pylonrecorder.cpp b/pylonrecorder.cpp
index d6a8db3..661cb86 100644
--- a/pylonrecorder.cpp
+++ b/pylonrecorder.cpp
@@ -582,14 +582,15 @@ void PylonRecorder::applyScaling(){
 
 
 void PylonRecorder::quitApplication() {
-  qDebug() << "Quit Application!";
-
+  qDebug() << "QuitApplication: Quit Application!";
   if (grabbing) {
+    std::cerr << "QuitApplication: Stop grabbing\n";
     qDebug() << "QuitApplication: Stop grabbing";
     stopRecording();
   }
   qDebug() << "QuitApplication done!";
   this->close();
+  std::cerr << "QuitApplication: done,\n";
 }
 
 
@@ -606,12 +607,12 @@ void PylonRecorder::cameraConfiguration(){
 }
 
 void PylonRecorder::camerasetup() {
-  std::cerr << "camera settings accepted" << std::endl;
+  std::cerr << "camera settings accepted1" << std::endl;
   std::cerr << d->result() << std::endl;
-  std::cerr << "camera settings accepted" << std::endl;
+  std::cerr << "camera settings accepted2" << std::endl;
   CameraLayout l = d->layout();
   std::cerr << l.rois.size() << l.devices.size() << std::endl;
-  std::cerr << "camera settings accepted" << std::endl;
+  std::cerr << "camera settings accepted3" << std::endl;
 
   delete d;
 }
@@ -645,13 +646,15 @@ void PylonRecorder::connectCamera() {
 
 
 void PylonRecorder::disconnectCamera() {
-  if (pyloncam->isOpen()) {
+  qDebug() << "disconnecting camera";
+  if (pyloncam != nullptr && pyloncam->isOpen()) {
     pyloncam->closeCamera();
     statusBar()->showMessage(tr("Camera closed!"));
     cameraConnectedLabel->setText("not connected");
     cameraConnectedLabel->setStyleSheet("QLabel { font-size: 10px;font-family: Arial;color: red;}");
     updateActions();
   }
+  qDebug() << "disconnecting cameras done";
 }