Skip to content

Commit ab832f0

Browse files
committed
MagCalib: fix posible add while in lsq
1 parent 16c4617 commit ab832f0

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

MagCalib.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ public static void DoGUIMagCalib(bool dointro = true)
185185

186186
static List<Tuple<float, float, float>> datacompass3 = new List<Tuple<float, float, float>>();
187187

188+
private static object _locker = new object();
189+
188190
static bool ReceviedPacket(MAVLink.MAVLinkMessage rawpacket)
189191
{
190192
if (rawpacket.msgid == (byte) MAVLink.MAVLINK_MSG_ID.SCALED_IMU2)
@@ -214,7 +216,7 @@ static bool ReceviedPacket(MAVLink.MAVLinkMessage rawpacket)
214216
float rawmz = packet.zmag;
215217

216218
// add data
217-
lock (datacompass2)
219+
lock (_locker)
218220
{
219221
if (rawmx == 0 || rawmy == 0 || rawmz == 0)
220222
return true;
@@ -251,7 +253,7 @@ static bool ReceviedPacket(MAVLink.MAVLinkMessage rawpacket)
251253
float rawmz = packet.zmag;
252254

253255
// add data
254-
lock (datacompass3)
256+
lock (_locker)
255257
{
256258
if (rawmx == 0 || rawmy == 0 || rawmz == 0)
257259
return true;
@@ -291,7 +293,7 @@ static bool ReceviedPacket(MAVLink.MAVLinkMessage rawpacket)
291293
float rawmz = packet.zmag - (float) MainV2.comPort.MAV.cs.mag_ofs_z;
292294

293295
// add data
294-
lock (datacompass1)
296+
lock (_locker)
295297
{
296298
datacompass1.Add(new Tuple<float, float, float>(rawmx, rawmy, rawmz));
297299
}
@@ -420,7 +422,7 @@ static void prd_DoWork(object sender, ProgressWorkerEventArgs e, object passdata
420422
MainV2.comPort.requestDatastream(MAVLink.MAV_DATA_STREAM.RAW_SENSORS, 50);
421423

422424
lastlsq = DateTime.Now;
423-
lock (datacompass1)
425+
lock (_locker)
424426
{
425427
var lsq = MagCalib.LeastSq(datacompass1, false);
426428
// simple validation
@@ -439,7 +441,7 @@ static void prd_DoWork(object sender, ProgressWorkerEventArgs e, object passdata
439441
if (datacompass2.Count > 100 && lastlsq2.Second != DateTime.Now.Second)
440442
{
441443
lastlsq2 = DateTime.Now;
442-
lock (datacompass2)
444+
lock (_locker)
443445
{
444446
var lsq = MagCalib.LeastSq(datacompass2, false);
445447
// simple validation
@@ -458,7 +460,7 @@ static void prd_DoWork(object sender, ProgressWorkerEventArgs e, object passdata
458460
if (datacompass3.Count > 100 && lastlsq3.Second != DateTime.Now.Second)
459461
{
460462
lastlsq3 = DateTime.Now;
461-
lock (datacompass3)
463+
lock (_locker)
462464
{
463465
var lsq = MagCalib.LeastSq(datacompass3, false);
464466
// simple validation

0 commit comments

Comments
 (0)