diff options
author | Reinhard Arlt <reinhard.arlt@t-online.de> | 2012-07-19 20:00:38 +0200 |
---|---|---|
committer | Reinhard Arlt <reinhard.arlt@t-online.de> | 2012-07-19 20:00:38 +0200 |
commit | 53b012d23db2ee923beffb6b2539c563a033834f (patch) | |
tree | 3a46b597e3a24bd88f321dedd7bf26c2410f9a26 /driver_nmea2000.c | |
parent | a7b65284285cae8139955cf009b4bb7117c7a65d (diff) | |
download | gpsd-53b012d23db2ee923beffb6b2539c563a033834f.tar.gz |
Fix race condition for multiple units.
Diffstat (limited to 'driver_nmea2000.c')
-rw-r--r-- | driver_nmea2000.c | 15 |
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; |