[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