summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton <anton@picapica>2019-02-24 18:16:19 +0400
committerAnton <anton@picapica>2019-02-24 18:16:19 +0400
commit389281c4f525290149e1dc35443ccff10d1a9f5b (patch)
tree7e96df35919ec0f38651e8d82724b553f009527a
parent1bbff2ba21bdfa09dcac716c7d1deccceb07734f (diff)
downloadpica-pica-389281c4f525290149e1dc35443ccff10d1a9f5b.tar.gz
pica-pica-389281c4f525290149e1dc35443ccff10d1a9f5b.zip
pica-client: bugfix, close unused c2n connections after PICA_event_loop() is finished in order to prevent invalid access to freed memory
-rw-r--r--pica-client/skynet.cpp7
-rw-r--r--pica-client/skynet.h1
2 files changed, 7 insertions, 1 deletions
diff --git a/pica-client/skynet.cpp b/pica-client/skynet.cpp
index da9f558..02be732 100644
--- a/pica-client/skynet.cpp
+++ b/pica-client/skynet.cpp
@@ -85,7 +85,7 @@ void SkyNet::nodelink_activated(PICA_c2n *c2n)
if (self_aware)
{
- PICA_close_c2n(c2n);
+ connected_nodes_to_close.append(c2n);
}
else
{
@@ -284,6 +284,11 @@ void SkyNet::timerEvent(QTimerEvent *e)
ret = PICA_event_loop(nodelinks.data(), 1);
+ while(!connected_nodes_to_close.empty())
+ {
+ PICA_close_c2n(connected_nodes_to_close.takeFirst());
+ }
+
if (ret != PICA_OK)
emit StatusMsg("event loop error!", true);//show some error message
}
diff --git a/pica-client/skynet.h b/pica-client/skynet.h
index f748e95..1c0c7d9 100644
--- a/pica-client/skynet.h
+++ b/pica-client/skynet.h
@@ -80,6 +80,7 @@ signals:
private:
Nodes nodes;
QList<QPair<struct PICA_c2n *, Nodes::NodeRecord> > connecting_nodes;
+ QList<struct PICA_c2n *> connected_nodes_to_close;
bool self_aware;
QString status;
struct PICA_c2n *active_nodelink;