projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altoslib: Lock access to AltosLink config_data
[fw/altos]
/
altoslib
/
AltosLink.java
diff --git
a/altoslib/AltosLink.java
b/altoslib/AltosLink.java
index b1bf525b1af48b6aae09f4ca8793ddbe8a1e8643..4823a986011c1ec80f443bfc16c6cc0e24458ce3 100644
(file)
--- a/
altoslib/AltosLink.java
+++ b/
altoslib/AltosLink.java
@@
-40,12
+40,12
@@
public abstract class AltosLink implements Runnable {
public LinkedList<LinkedBlockingQueue<AltosLine>> monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();;
public LinkedBlockingQueue<AltosLine> reply_queue = new LinkedBlockingQueue<AltosLine>();
public LinkedList<LinkedBlockingQueue<AltosLine>> monitors = new LinkedList<LinkedBlockingQueue<AltosLine>> ();;
public LinkedBlockingQueue<AltosLine> reply_queue = new LinkedBlockingQueue<AltosLine>();
- public void add_monitor(LinkedBlockingQueue<AltosLine> q) {
+ public
synchronized
void add_monitor(LinkedBlockingQueue<AltosLine> q) {
set_monitor(true);
monitors.add(q);
}
set_monitor(true);
monitors.add(q);
}
- public void remove_monitor(LinkedBlockingQueue<AltosLine> q) {
+ public
synchronized
void remove_monitor(LinkedBlockingQueue<AltosLine> q) {
monitors.remove(q);
if (monitors.isEmpty())
set_monitor(false);
monitors.remove(q);
if (monitors.isEmpty())
set_monitor(false);
@@
-256,6
+256,8
@@
public abstract class AltosLink implements Runnable {
public String callsign;
AltosConfigData config_data;
public String callsign;
AltosConfigData config_data;
+ private Object config_data_lock = new Object();
+
private int telemetry_len() {
return AltosLib.telemetry_len(telemetry);
}
private int telemetry_len() {
return AltosLib.telemetry_len(telemetry);
}
@@
-329,9
+331,11
@@
public abstract class AltosLink implements Runnable {
}
public AltosConfigData config_data() throws InterruptedException, TimeoutException {
}
public AltosConfigData config_data() throws InterruptedException, TimeoutException {
- if (config_data == null)
- config_data = new AltosConfigData(this);
- return config_data;
+ synchronized(config_data_lock) {
+ if (config_data == null)
+ config_data = new AltosConfigData(this);
+ return config_data;
+ }
}
public void set_callsign(String callsign) {
}
public void set_callsign(String callsign) {