@@ -34,14 +34,21 @@ QgsCoordinateTransformContext &QgsCoordinateTransformContext::operator=( const Q
34
34
void QgsCoordinateTransformContext::clear ()
35
35
{
36
36
d.detach ();
37
+ // play it safe
38
+ d->mLock .lockForWrite ();
37
39
d->mSourceDestDatumTransforms .clear ();
38
40
d->mSourceDatumTransforms .clear ();
39
41
d->mDestDatumTransforms .clear ();
42
+ d->mLock .unlock ();
40
43
}
41
44
42
45
QMap<QString, int > QgsCoordinateTransformContext::sourceDatumTransforms () const
43
46
{
44
- return d->mSourceDatumTransforms ;
47
+ d->mLock .lockForRead ();
48
+ auto res = d->mSourceDatumTransforms ;
49
+ res.detach ();
50
+ d->mLock .unlock ();
51
+ return res;
45
52
}
46
53
47
54
bool QgsCoordinateTransformContext::addSourceDatumTransform ( const QgsCoordinateReferenceSystem &crs, int transform )
@@ -50,19 +57,26 @@ bool QgsCoordinateTransformContext::addSourceDatumTransform( const QgsCoordinate
50
57
return false ;
51
58
52
59
d.detach ();
60
+ d->mLock .lockForWrite ();
53
61
if ( transform == -1 )
54
62
{
55
63
d->mSourceDatumTransforms .remove ( crs.authid () );
56
- return true ;
57
64
}
58
-
59
- d->mSourceDatumTransforms .insert ( crs.authid (), transform );
65
+ else
66
+ {
67
+ d->mSourceDatumTransforms .insert ( crs.authid (), transform );
68
+ }
69
+ d->mLock .unlock ();
60
70
return true ;
61
71
}
62
72
63
73
QMap<QString, int > QgsCoordinateTransformContext::destinationDatumTransforms () const
64
74
{
65
- return d->mDestDatumTransforms ;
75
+ d->mLock .lockForRead ();
76
+ auto res = d->mDestDatumTransforms ;
77
+ res.detach ();
78
+ d->mLock .unlock ();
79
+ return res;
66
80
}
67
81
68
82
bool QgsCoordinateTransformContext::addDestinationDatumTransform ( const QgsCoordinateReferenceSystem &crs, int transform )
@@ -71,19 +85,27 @@ bool QgsCoordinateTransformContext::addDestinationDatumTransform( const QgsCoord
71
85
return false ;
72
86
73
87
d.detach ();
88
+
89
+ d->mLock .lockForWrite ();
74
90
if ( transform == -1 )
75
91
{
76
92
d->mDestDatumTransforms .remove ( crs.authid () );
77
- return true ;
78
93
}
79
-
80
- d->mDestDatumTransforms .insert ( crs.authid (), transform );
94
+ else
95
+ {
96
+ d->mDestDatumTransforms .insert ( crs.authid (), transform );
97
+ }
98
+ d->mLock .unlock ();
81
99
return true ;
82
100
}
83
101
84
102
QMap<QPair<QString, QString>, QPair<int , int > > QgsCoordinateTransformContext::sourceDestinationDatumTransforms () const
85
103
{
86
- return d->mSourceDestDatumTransforms ;
104
+ d->mLock .lockForRead ();
105
+ auto res = d->mSourceDestDatumTransforms ;
106
+ res.detach ();
107
+ d->mLock .unlock ();
108
+ return res;
87
109
}
88
110
89
111
bool QgsCoordinateTransformContext::addSourceDestinationDatumTransform ( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, int sourceTransform, int destinationTransform )
@@ -92,13 +114,16 @@ bool QgsCoordinateTransformContext::addSourceDestinationDatumTransform( const Qg
92
114
return false ;
93
115
94
116
d.detach ();
117
+ d->mLock .lockForWrite ();
95
118
if ( sourceTransform == -1 || destinationTransform == -1 )
96
119
{
97
120
d->mSourceDestDatumTransforms .remove ( qMakePair ( sourceCrs.authid (), destinationCrs.authid () ) );
98
- return true ;
99
121
}
100
-
101
- d->mSourceDestDatumTransforms .insert ( qMakePair ( sourceCrs.authid (), destinationCrs.authid () ), qMakePair ( sourceTransform, destinationTransform ) );
122
+ else
123
+ {
124
+ d->mSourceDestDatumTransforms .insert ( qMakePair ( sourceCrs.authid (), destinationCrs.authid () ), qMakePair ( sourceTransform, destinationTransform ) );
125
+ }
126
+ d->mLock .unlock ();
102
127
return true ;
103
128
}
104
129
0 commit comments