]> git.basschouten.com Git - openhab-addons.git/commitdiff
Synchronize access to account to avoid concurrency issues (#14128)
authorKai Kreuzer <kai@openhab.org>
Sun, 1 Jan 2023 11:02:15 +0000 (12:02 +0100)
committerGitHub <noreply@github.com>
Sun, 1 Jan 2023 11:02:15 +0000 (12:02 +0100)
Signed-off-by: Kai Kreuzer <kai@openhab.org>
bundles/org.openhab.binding.tesla/src/main/java/org/openhab/binding/tesla/internal/handler/TeslaVehicleHandler.java

index fff168e5051a8a68770a5e463b82ce31bec63e07..c7920a6a02dcdf29ae38be45ceead32fbdba7c1b 100644 (file)
@@ -818,31 +818,34 @@ public class TeslaVehicleHandler extends BaseThingHandler {
         if (authHeader != null) {
             try {
                 // get a list of vehicles
-                Response response = account.vehiclesTarget.request(MediaType.APPLICATION_JSON_TYPE)
-                        .header("Authorization", authHeader).get();
+                synchronized (account.vehiclesTarget) {
+                    Response response = account.vehiclesTarget.request(MediaType.APPLICATION_JSON_TYPE)
+                            .header("Authorization", authHeader).get();
 
-                logger.debug("Querying the vehicle, response : {}, {}", response.getStatus(),
-                        response.getStatusInfo().getReasonPhrase());
+                    logger.debug("Querying the vehicle, response : {}, {}", response.getStatus(),
+                            response.getStatusInfo().getReasonPhrase());
 
-                if (!checkResponse(response, true)) {
-                    logger.debug("An error occurred while querying the vehicle");
-                    return null;
-                }
+                    if (!checkResponse(response, true)) {
+                        logger.debug("An error occurred while querying the vehicle");
+                        return null;
+                    }
+
+                    JsonObject jsonObject = JsonParser.parseString(response.readEntity(String.class)).getAsJsonObject();
+                    Vehicle[] vehicleArray = gson.fromJson(jsonObject.getAsJsonArray("response"), Vehicle[].class);
 
-                JsonObject jsonObject = JsonParser.parseString(response.readEntity(String.class)).getAsJsonObject();
-                Vehicle[] vehicleArray = gson.fromJson(jsonObject.getAsJsonArray("response"), Vehicle[].class);
-
-                for (Vehicle vehicle : vehicleArray) {
-                    logger.debug("Querying the vehicle: VIN {}", vehicle.vin);
-                    if (vehicle.vin.equals(getConfig().get(VIN))) {
-                        vehicleJSON = gson.toJson(vehicle);
-                        parseAndUpdate("queryVehicle", null, vehicleJSON);
-                        if (logger.isTraceEnabled()) {
-                            logger.trace("Vehicle is id {}/vehicle_id {}/tokens {}", vehicle.id, vehicle.vehicle_id,
-                                    vehicle.tokens);
+                    for (Vehicle vehicle : vehicleArray) {
+                        logger.debug("Querying the vehicle: VIN {}", vehicle.vin);
+                        if (vehicle.vin.equals(getConfig().get(VIN))) {
+                            vehicleJSON = gson.toJson(vehicle);
+                            parseAndUpdate("queryVehicle", null, vehicleJSON);
+                            if (logger.isTraceEnabled()) {
+                                logger.trace("Vehicle is id {}/vehicle_id {}/tokens {}", vehicle.id, vehicle.vehicle_id,
+                                        vehicle.tokens);
+                            }
+                            return vehicle;
                         }
-                        return vehicle;
                     }
+
                 }
             } catch (ProcessingException e) {
                 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage());