Modify DB transactions to return when fail
authorAbhay agarwal <ay.agarwal@samsung.com>
Thu, 31 Oct 2019 06:16:07 +0000 (11:46 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Tue, 5 Nov 2019 10:39:37 +0000 (19:39 +0900)
- Problem: If the transaction fails, more queries are being run on database
to insert/update/delete data from it without starting the transaction.
- Solution: Rollback and return from the function when transaction fails.

Change-Id: I086e56cae6a4964925fd8ee63b486469fe052314
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
ua-daemon/src/ua-manager-core.c

index 05ecb5c..86164df 100644 (file)
@@ -326,6 +326,7 @@ static void __remove_user_device(gpointer data)
                                        dev_info.device_id, dev_info.type, dev_info.mac)) {
                        UAM_ERR("_uam_device_db_delete_device_info failed");
                        __uam_db_end_transaction(0);
+                       return;
                }
        }
        __uam_db_end_transaction(1);
@@ -1564,6 +1565,7 @@ int _uam_core_service_add_user(const char *svc_name, const char *account)
                                                tech->tech_type, service->name, device->discriminant);
                        if (UAM_ERROR_NONE != ret) {
                                UAM_WARN("Device service addition to service device mapping failed");
+                               __uam_db_end_transaction(0);
                                return ret;
                        }
                }
@@ -1580,6 +1582,7 @@ int _uam_core_service_remove_user(const char *svc_name, const char *account)
        FUNC_ENTRY;
        GSList *l;
        uam_db_user_info_t *user;
+       int ret;
 
        retv_if(NULL == account, UAM_ERROR_INVALID_PARAMETER);
        retv_if(NULL == svc_name, UAM_ERROR_INVALID_PARAMETER);
@@ -1621,10 +1624,12 @@ int _uam_core_service_remove_user(const char *svc_name, const char *account)
 
                        mac = __get_mac_addr(tech);
                        /* Remove service-device from DB */
-                       if (UAM_ERROR_NONE != _uam_db_delete_device_service_info(
-                                               device->device_id, tech->tech_type, mac, svc_name)) {
+                       ret = _uam_db_delete_device_service_info(device->device_id,
+                                       tech->tech_type, mac, svc_name);
+                       if (UAM_ERROR_NONE != ret) {
                                UAM_WARN("Device service removal from persistent DB failed");
                                __uam_db_end_transaction(0);
+                               return ret;
                        }
                }
        }
@@ -2835,6 +2840,7 @@ void _uam_core_handle_presence_detected(unsigned int sensor,
                                        dev_info->type, dev_info->mac, dev_info->ipv4_addr)) {
                                UAM_WARN("_uam_device_db_update_device_ip_address failed");
                                __uam_db_end_transaction(0);
+                               return;
                        }
                }
        }
@@ -2844,12 +2850,14 @@ void _uam_core_handle_presence_detected(unsigned int sensor,
                                dev_info->type, dev_info->mac, tech->timestamp)) {
                UAM_WARN("_uam_device_db_update_device_timestamp failed");
                __uam_db_end_transaction(0);
+               return;
        }
 
        if (UAM_ERROR_NONE != _uam_device_db_update_device_presence(dev_info->device_id,
                                dev_info->type, dev_info->mac, tech->presence_state)) {
                UAM_WARN("_uam_device_db_update_device_presence failed");
                __uam_db_end_transaction(0);
+               return;
        }
 
        __send_user_presence_event(tech, sensor, dev_info->device_id);