Fix bt-service crash issue in testhub
[platform/core/connectivity/bluetooth-frwk.git] / bt-service-adaptation / services / adapter / bt-service-core-adapter-le.c
index dc5abdd..5f146f3 100644 (file)
@@ -33,6 +33,7 @@
 #include "bt-service-gatt.h"
 #include "bt-service-util.h"
 #include "bt-service-core-device.h"
+#include "bt-service-battery-monitor.h"
 
 #include <oal-hardware.h>
 #include <oal-manager.h>
@@ -90,6 +91,8 @@ static bt_le_discovery_state_t adapter_le_discovery_state = LE_DISCOVERY_STOPPED
 
 typedef struct {
        char *sender;
+       uid_t uid;
+       pid_t pid;
        GSList *filter_list;
        gboolean is_scanning;
 } bt_adapter_le_scanner_t;
@@ -1980,7 +1983,7 @@ int _bt_unregister_all_scan_filters(const char* sender)
        return BLUETOOTH_ERROR_NONE;
 }
 
-int _bt_start_le_scan(const char *sender)
+int _bt_start_le_scan(const char *sender, uid_t uid, pid_t pid)
 {
        bt_adapter_le_scanner_t *scanner;
        int ret;
@@ -1991,6 +1994,8 @@ int _bt_start_le_scan(const char *sender)
                retv_if(scanner == NULL, BLUETOOTH_ERROR_INTERNAL);
 
                scanner->sender = g_strdup(sender);
+               scanner->uid = uid;
+               scanner->pid = pid;
                scanner_list = g_slist_append(scanner_list, scanner);
        }
 
@@ -2131,12 +2136,16 @@ void _bt_check_le_scanner_app_termination(const char *sender)
        if (!scanner)
                return;
 
-       if (scanner->is_scanning)
-               _bt_stop_le_scan(sender);
+       _bt_bm_remove_scan_app(SCAN_LE, scanner->uid, scanner->pid);
+
+       if (scanner->is_scanning) {
+               /* Free 'scanner' into the function */
+               if (_bt_stop_le_scan(sender) != BLUETOOTH_ERROR_NOT_IN_OPERATION)
+                       return;
+       }
 
        scanner_list = g_slist_remove(scanner_list, scanner);
-       g_free(scanner->sender);
-       g_free(scanner);
+       __bt_free_le_scanner(scanner);
 }
 
 int _bt_service_le_init(void)
@@ -2285,7 +2294,7 @@ int _bt_set_le_static_random_address(gboolean is_enable)
 
        result =  adapter_set_le_static_random_address(is_enable);
        if (result != OAL_STATUS_SUCCESS) {
-               BT_ERR("adapter_set_connectable failed: %d", result);
+               BT_ERR("adapter_set_le_static_random_address failed: %d", result);
                result = BLUETOOTH_ERROR_INTERNAL;
        } else {
                BT_INFO("SetLeStaticRandomAddress as %d", is_enable);