summaryrefslogtreecommitdiff
path: root/driver_nmea2000.c
diff options
context:
space:
mode:
authorReinhard Arlt <reinhard.arlt@t-online.de>2012-07-19 20:00:38 +0200
committerReinhard Arlt <reinhard.arlt@t-online.de>2012-07-19 20:00:38 +0200
commit53b012d23db2ee923beffb6b2539c563a033834f (patch)
tree3a46b597e3a24bd88f321dedd7bf26c2410f9a26 /driver_nmea2000.c
parenta7b65284285cae8139955cf009b4bb7117c7a65d (diff)
downloadgpsd-53b012d23db2ee923beffb6b2539c563a033834f.tar.gz
Fix race condition for multiple units.
Diffstat (limited to 'driver_nmea2000.c')
-rw-r--r--driver_nmea2000.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/driver_nmea2000.c b/driver_nmea2000.c
index 617b13e2..bc7c7c15 100644
--- a/driver_nmea2000.c
+++ b/driver_nmea2000.c
@@ -531,6 +531,21 @@ static void find_pgn(struct can_frame *frame, struct gps_device_t *session)
}
if (session->driver.nmea2000.unit_valid == 0) {
+ unsigned int l1, l2;
+
+ for (l1=0;l1<NMEA2000_NETS;l1++) {
+ for (l2=0;l2<NMEA2000_UNITS;l2++) {
+ if (session == nmea2000_units[l1][l2]) {
+ session->driver.nmea2000.unit = l2;
+ session->driver.nmea2000.unit_valid = 1;
+ session->driver.nmea2000.can_net = l1;
+ can_net = l1;
+ }
+ }
+ }
+ }
+
+ if (session->driver.nmea2000.unit_valid == 0) {
session->driver.nmea2000.unit = source_unit;
session->driver.nmea2000.unit_valid = 1;
nmea2000_units[can_net][source_unit] = session;