aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/database')
-rw-r--r--src/org/traccar/database/GeofenceManager.java20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/org/traccar/database/GeofenceManager.java b/src/org/traccar/database/GeofenceManager.java
index dc31172b9..930008082 100644
--- a/src/org/traccar/database/GeofenceManager.java
+++ b/src/org/traccar/database/GeofenceManager.java
@@ -155,25 +155,35 @@ public class GeofenceManager {
public final void refresh() {
if (dataManager != null) {
try {
+
+ Collection<GroupGeofence> databaseGroupGeofences = dataManager.getGroupGeofences();
groupGeofencesLock.writeLock().lock();
- deviceGeofencesLock.writeLock().lock();
try {
groupGeofences.clear();
- for (GroupGeofence groupGeofence : dataManager.getGroupGeofences()) {
+ for (GroupGeofence groupGeofence : databaseGroupGeofences) {
getGroupGeofences(groupGeofence.getGroupId()).add(groupGeofence.getGeofenceId());
}
+ } finally {
+ groupGeofencesLock.writeLock().unlock();
+ }
+ Collection<DeviceGeofence> databaseDeviceGeofences = dataManager.getDeviceGeofences();
+ Collection<Device> allDevices = Context.getDeviceManager().getAllDevices();
+
+ groupGeofencesLock.readLock().lock();
+ deviceGeofencesLock.writeLock().lock();
+ try {
deviceGeofences.clear();
deviceGeofencesWithGroups.clear();
- for (DeviceGeofence deviceGeofence : dataManager.getDeviceGeofences()) {
+ for (DeviceGeofence deviceGeofence : databaseDeviceGeofences) {
getDeviceGeofences(deviceGeofences, deviceGeofence.getDeviceId())
.add(deviceGeofence.getGeofenceId());
getDeviceGeofences(deviceGeofencesWithGroups, deviceGeofence.getDeviceId())
.add(deviceGeofence.getGeofenceId());
}
- for (Device device : Context.getDeviceManager().getAllDevices()) {
+ for (Device device : allDevices) {
long groupId = device.getGroupId();
while (groupId != 0) {
getDeviceGeofences(deviceGeofencesWithGroups,
@@ -204,8 +214,8 @@ public class GeofenceManager {
}
} finally {
- groupGeofencesLock.writeLock().unlock();
deviceGeofencesLock.writeLock().unlock();
+ groupGeofencesLock.readLock().unlock();
}
} catch (SQLException error) {