Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
45d8d890
Unverified
Commit
45d8d890
authored
Feb 04, 2018
by
Don Gagne
Committed by
GitHub
Feb 04, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #6104 from DonLakeFlyer/TerrainCrash
Terrain crash
parents
03465774
ce4a0e67
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
58 additions
and
9 deletions
+58
-9
MissionController.cc
src/MissionManager/MissionController.cc
+1
-0
Terrain.cc
src/Terrain.cc
+52
-7
Terrain.h
src/Terrain.h
+5
-2
No files found.
src/MissionManager/MissionController.cc
View file @
45d8d890
...
...
@@ -479,6 +479,7 @@ void MissionController::removeAll(void)
{
if
(
_visualItems
)
{
_deinitAllVisualItems
();
_visualItems
->
clearAndDeleteContents
();
_visualItems
->
deleteLater
();
_settingsItem
=
NULL
;
_visualItems
=
new
QmlObjectListModel
(
this
);
...
...
src/Terrain.cc
View file @
45d8d890
...
...
@@ -33,6 +33,8 @@ TerrainBatchManager::TerrainBatchManager(void)
void
TerrainBatchManager
::
addQuery
(
ElevationProvider
*
elevationProvider
,
const
QList
<
QGeoCoordinate
>&
coordinates
)
{
if
(
coordinates
.
length
()
>
0
)
{
qCDebug
(
ElevationProviderLog
)
<<
"addQuery: elevationProvider:coordinates.count"
<<
elevationProvider
<<
coordinates
.
count
();
connect
(
elevationProvider
,
&
ElevationProvider
::
destroyed
,
this
,
&
TerrainBatchManager
::
_elevationProviderDestroyed
);
QueuedRequestInfo_t
queuedRequestInfo
=
{
elevationProvider
,
coordinates
};
_requestQueue
.
append
(
queuedRequestInfo
);
if
(
!
_batchTimer
.
isActive
())
{
...
...
@@ -43,7 +45,7 @@ void TerrainBatchManager::addQuery(ElevationProvider* elevationProvider, const Q
void
TerrainBatchManager
::
_sendNextBatch
(
void
)
{
qCDebug
(
ElevationProviderLog
)
<<
"_sendNextBatch _state:_requestQueue.count
"
<<
(
int
)
_state
<<
_requestQueue
.
count
();
qCDebug
(
ElevationProviderLog
)
<<
"_sendNextBatch _state:_requestQueue.count
:_sentRequests.count"
<<
_stateToString
(
_state
)
<<
_requestQueue
.
count
()
<<
_sentRequests
.
count
();
if
(
_state
!=
State
::
Idle
)
{
// Waiting for last download the complete, wait some more
...
...
@@ -60,7 +62,7 @@ void TerrainBatchManager::_sendNextBatch(void)
// Convert coordinates to point strings for json query
QString
points
;
foreach
(
const
QueuedRequestInfo_t
&
requestInfo
,
_requestQueue
)
{
SentRequestInfo_t
sentRequestInfo
=
{
requestInfo
.
elevationProvider
,
requestInfo
.
coordinates
.
count
()
};
SentRequestInfo_t
sentRequestInfo
=
{
requestInfo
.
elevationProvider
,
false
,
requestInfo
.
coordinates
.
count
()
};
qCDebug
(
ElevationProviderLog
)
<<
"Building request: coordinate count"
<<
requestInfo
.
coordinates
.
count
();
_sentRequests
.
append
(
sentRequestInfo
);
...
...
@@ -100,7 +102,10 @@ void TerrainBatchManager::_batchFailed(void)
QList
<
float
>
noAltitudes
;
foreach
(
const
SentRequestInfo_t
&
sentRequestInfo
,
_sentRequests
)
{
sentRequestInfo
.
elevationProvider
->
_signalTerrainData
(
false
,
noAltitudes
);
if
(
!
sentRequestInfo
.
providerDestroyed
)
{
disconnect
(
sentRequestInfo
.
elevationProvider
,
&
ElevationProvider
::
destroyed
,
this
,
&
TerrainBatchManager
::
_elevationProviderDestroyed
);
sentRequestInfo
.
elevationProvider
->
_signalTerrainData
(
false
,
noAltitudes
);
}
}
_sentRequests
.
clear
();
}
...
...
@@ -145,15 +150,56 @@ void TerrainBatchManager::_requestFinished()
int
currentIndex
=
0
;
foreach
(
const
SentRequestInfo_t
&
sentRequestInfo
,
_sentRequests
)
{
QList
<
float
>
requestAltitudes
=
altitudes
.
mid
(
currentIndex
,
sentRequestInfo
.
cCoord
);
sentRequestInfo
.
elevationProvider
->
_signalTerrainData
(
true
,
requestAltitudes
);
currentIndex
+=
sentRequestInfo
.
cCoord
;
if
(
!
sentRequestInfo
.
providerDestroyed
)
{
disconnect
(
sentRequestInfo
.
elevationProvider
,
&
ElevationProvider
::
destroyed
,
this
,
&
TerrainBatchManager
::
_elevationProviderDestroyed
);
QList
<
float
>
requestAltitudes
=
altitudes
.
mid
(
currentIndex
,
sentRequestInfo
.
cCoord
);
sentRequestInfo
.
elevationProvider
->
_signalTerrainData
(
true
,
requestAltitudes
);
currentIndex
+=
sentRequestInfo
.
cCoord
;
}
}
_sentRequests
.
clear
();
reply
->
deleteLater
();
}
void
TerrainBatchManager
::
_elevationProviderDestroyed
(
QObject
*
elevationProvider
)
{
// Remove/Mark deleted objects queries from queues
qCDebug
(
ElevationProviderLog
)
<<
"_elevationProviderDestroyed elevationProvider"
<<
elevationProvider
;
int
i
=
0
;
while
(
i
<
_requestQueue
.
count
())
{
const
QueuedRequestInfo_t
&
requestInfo
=
_requestQueue
[
i
];
if
(
requestInfo
.
elevationProvider
==
elevationProvider
)
{
qCDebug
(
ElevationProviderLog
)
<<
"Removing deleted provider from _requestQueue index:elevationProvider"
<<
i
<<
requestInfo
.
elevationProvider
;
_requestQueue
.
removeAt
(
i
);
}
else
{
i
++
;
}
}
for
(
int
i
=
0
;
i
<
_sentRequests
.
count
();
i
++
)
{
SentRequestInfo_t
&
sentRequestInfo
=
_sentRequests
[
i
];
if
(
sentRequestInfo
.
elevationProvider
==
elevationProvider
)
{
qCDebug
(
ElevationProviderLog
)
<<
"Zombieing deleted provider from _sentRequests index:elevatationProvider"
<<
sentRequestInfo
.
elevationProvider
;
sentRequestInfo
.
providerDestroyed
=
true
;
}
}
}
QString
TerrainBatchManager
::
_stateToString
(
State
state
)
{
switch
(
state
)
{
case
State
:
:
Idle
:
return
QStringLiteral
(
"Idle"
);
case
State
:
:
Downloading
:
return
QStringLiteral
(
"Downloading"
);
}
return
QStringLiteral
(
"State unknown"
);
}
ElevationProvider
::
ElevationProvider
(
QObject
*
parent
)
:
QObject
(
parent
)
{
...
...
@@ -161,7 +207,6 @@ ElevationProvider::ElevationProvider(QObject* parent)
}
void
ElevationProvider
::
queryTerrainData
(
const
QList
<
QGeoCoordinate
>&
coordinates
)
{
qCDebug
(
ElevationProviderLog
)
<<
"queryTerrainData: coordinate count"
<<
coordinates
.
count
();
if
(
coordinates
.
length
()
==
0
)
{
return
;
}
...
...
src/Terrain.h
View file @
45d8d890
...
...
@@ -30,8 +30,9 @@ public:
void
addQuery
(
ElevationProvider
*
elevationProvider
,
const
QList
<
QGeoCoordinate
>&
coordinates
);
private
slots
:
void
_sendNextBatch
(
void
);
void
_requestFinished
(
void
);
void
_sendNextBatch
(
void
);
void
_requestFinished
(
void
);
void
_elevationProviderDestroyed
(
QObject
*
elevationProvider
);
private:
typedef
struct
{
...
...
@@ -41,6 +42,7 @@ private:
typedef
struct
{
ElevationProvider
*
elevationProvider
;
bool
providerDestroyed
;
int
cCoord
;
}
SentRequestInfo_t
;
...
...
@@ -51,6 +53,7 @@ private:
};
void
_batchFailed
(
void
);
QString
_stateToString
(
State
state
);
QList
<
QueuedRequestInfo_t
>
_requestQueue
;
QList
<
SentRequestInfo_t
>
_sentRequests
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment