[kgraphviewer-devel] [KGraphViewer] 6751ac9: Do not crash on user-defined+unknown layout algos

Kevin Funk krf at electrostorm.net
Fri Dec 10 15:13:48 CET 2010


commit 6751ac9da2760f7d8202a2e24529ec0816736ae6
branch libkgraphviz
Author: Kevin Funk <krf at electrostorm.net>
Date:   Fri Dec 10 15:00:23 2010 +0100

    Do not crash on user-defined+unknown layout algos

diff --git a/src/kgraphviz/dotgraphview.cpp b/src/kgraphviz/dotgraphview.cpp
index 2abf5d0..32075c0 100644
--- a/src/kgraphviz/dotgraphview.cpp
+++ b/src/kgraphviz/dotgraphview.cpp
@@ -2183,6 +2183,11 @@ void DotGraphView::slotAGraphReadFinished()
 void DotGraphView::slotAGraphLayoutFinished()
 {
   Q_D(DotGraphView);
+  if (!d->m_layoutThread.success()) {
+    kWarning() << "Thread failed to layout graph properly, not doing anything.";
+    return;
+  }
+  
   bool result = loadLibrary(d->m_layoutThread.g(), d->m_layoutThread.layoutCommand());
   if (result)
     d->m_graph->dotFileName(d->m_loadThread.dotFileName());
diff --git a/src/kgraphviz/support/layoutagraphthread.cpp b/src/kgraphviz/support/layoutagraphthread.cpp
index a222800..74e8162 100644
--- a/src/kgraphviz/support/layoutagraphthread.cpp
+++ b/src/kgraphviz/support/layoutagraphthread.cpp
@@ -25,8 +25,16 @@ void LayoutAGraphThread::run()
 {
   kDebug();
   m_gvc = gvContext();
-  gvLayout(m_gvc, m_g, m_layoutCommand.toUtf8().data());
+
+  int rc = gvLayout(m_gvc, m_g, m_layoutCommand.toUtf8().data());
+  if (rc != 0) {
+    kWarning() << "gvLayout failed with returncode:" << rc;
+    m_success = false;
+    return;
+  }
+
   gvRender (m_gvc, m_g, "xdot", NULL);
+  m_success = true;
 }
 
 void LayoutAGraphThread::layoutGraph(graph_t* graph, const QString& layoutCommand)
@@ -35,6 +43,7 @@ void LayoutAGraphThread::layoutGraph(graph_t* graph, const QString& layoutComman
   if (isRunning())
     return;
   m_g = graph;
+  m_success = false;
   m_layoutCommand = layoutCommand;
   start();
 }
diff --git a/src/kgraphviz/support/layoutagraphthread.h b/src/kgraphviz/support/layoutagraphthread.h
index 1c3955d..20199f6 100644
--- a/src/kgraphviz/support/layoutagraphthread.h
+++ b/src/kgraphviz/support/layoutagraphthread.h
@@ -31,14 +31,17 @@ public:
   inline graph_t* g() {return m_g;}
   inline GVC_t* gvc() {return m_gvc;}
   inline const QString& layoutCommand() const {return m_layoutCommand;}
+  inline bool success() {return m_success;}
   
 protected:
-virtual void run();
+  virtual void run();
 
 private:
   QString m_layoutCommand;
   graph_t* m_g;
   GVC_t *m_gvc;
+
+  bool m_success;
 };
 
 #endif // LAYOUTAGRAPHTHREAD_H


More information about the kgraphviewer-devel mailing list