[Bugfix][API-1395]the patch from MTK to add register-callback return value and retry machine-made(500ms once,total 20 times) when mnld-gpshal socket fail

Only Configure:No
Affected branch:GSW3.0-No-Connman
Affected module:GNSS
Is it affected on both ZXIC and MTK:only MTK,
Self-test:Yes,
Doc Update:NO.

Change-Id: Ide815437e1e08dffade4b8a8291b18fa36b46a67
diff --git a/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h b/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h
index 9b6d74b..30d3aa5 100644
--- a/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h
+++ b/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h
@@ -21,6 +21,7 @@
 
 #define DUMP_BYTES_PER_LINE 16
 #define DUMP_MAX_PRINT_LINE 10
+#define SOCKET_RETRY_MAX_COUNT 20
 
 #define MNLDINF_DUMP_MEM(addr, len) do{\
     int i = 0, j = 0;\
diff --git a/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c b/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c
index f6dd4b5..052a9ba 100755
--- a/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c
+++ b/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c
@@ -427,6 +427,7 @@
     int fd;
     int size;
     struct sockaddr_un addr;
+    int socket_retry_counter=0;
 
     memset(&addr, 0, sizeof(addr));
     addr.sun_family = AF_UNIX;
@@ -447,13 +448,23 @@
             strerror(errno), errno);
         return -1;
     }
-    if(connect(fd, (struct sockaddr*)&addr, size) == -1) {
-        LOGE("mnldinf_socket_tcp_client_connect_local() connect() failed, abstruct=%d name=[%s] reason=[%s]%d",
+/* retry connection if socket connection fail, 500000us*20 times */
+    while (1){
+        if(connect(fd, (struct sockaddr*)&addr, size) == -1) {
+            LOGE("mnldinf_socket_tcp_client_connect_local() connect() failed, abstruct=%d name=[%s] reason=[%s]%d",
             abstract, name, strerror(errno), errno);
-        close(fd);
-        return -1;
+        }else{
+            break;
+        }
+        if(socket_retry_counter >= SOCKET_RETRY_MAX_COUNT) {
+            LOGE("retry connect() for 20 times");
+            close(fd);
+            return -1;
+        }
+        socket_retry_counter++;
+        LOGE("retry connect() socket_retry_counter=%d", socket_retry_counter);
+        usleep(500000);
     }
-
     return fd;
 }
 
diff --git a/src/connectivity/gps/2.0/gps_hal/src/gpshal.c b/src/connectivity/gps/2.0/gps_hal/src/gpshal.c
old mode 100644
new mode 100755
index 3240013..9aad141
--- a/src/connectivity/gps/2.0/gps_hal/src/gpshal.c
+++ b/src/connectivity/gps/2.0/gps_hal/src/gpshal.c
@@ -139,7 +139,7 @@
 //     Do not deinit resources
 //         We want to have a simple design for a built-in service
 //         "Deinit" is for an installable / removable service
-static void gpshal_resource_init(GpsCallbacks_ext* src) {
+static int gpshal_resource_init(GpsCallbacks_ext* src) {
     unsigned int capabilities = 0;
     unsigned int year = 0;
     char *name = g_gpshal_ctx.gps_name;//"Version: MNLD, MNL";
@@ -155,50 +155,56 @@
     system_info.size = sizeof(GnssSystemInfo);
     g_gpshal_ctx.gps_cbs->set_system_info_cb(&system_info);
 
-    if (GPSHAL_STATE_UNKNOWN != g_gpshal_ctx.gps_state_intent) return;  // at most once
+    if (GPSHAL_STATE_UNKNOWN != g_gpshal_ctx.gps_state_intent){
+        return 0;  // already set
+    } // at most once
 
     g_gpshal_ctx.fd_mnl2hal_basic = create_mnl2hal_fd_basic();
-    if (-1 == g_gpshal_ctx.fd_mnl2hal_basic) return;  // error
+    if (-1 == g_gpshal_ctx.fd_mnl2hal_basic){
+        return -1;  // error
+    }
 
     g_gpshal_ctx.fd_mnl2hal_ext = create_mnl2hal_fd_ext();
-    if (-1 == g_gpshal_ctx.fd_mnl2hal_ext) return;  // error
+    if (-1 == g_gpshal_ctx.fd_mnl2hal_ext){
+        return -1;  // error
+    }
 
     g_gpshal_ctx.fd_worker_epoll = epoll_create(MAX_EPOLL_EVENT);
     if (-1 == g_gpshal_ctx.fd_worker_epoll) {
         LOGE("Fail to create epoll reason=[%s]%d",
                 strerror(errno), errno);
-        return;  // error
+        return -1;  // error
     }
 
     if (mnldinf_epoll_add_fd(
             g_gpshal_ctx.fd_worker_epoll,
             g_gpshal_ctx.fd_mnl2hal_basic) == -1) {
         LOGE("Fail to add fd_mnl2hal basic");
-        return;  // error
+        return -1;  // error
     }
 
     if (mnldinf_epoll_add_fd(
             g_gpshal_ctx.fd_worker_epoll,
             g_gpshal_ctx.fd_mnl2hal_ext) == -1) {
         LOGE("Fail to add fd_mnl2hal ext");
-        return;  // error
+        return -1;  // error
     }
     g_gpshal_ctx.thd_worker = g_gpshal_ctx.gps_cbs->create_thread_cb(
             GPSHAL_WORKER_THREAD_NAME, gpshal_worker_thread, NULL);
     if (!g_gpshal_ctx.thd_worker) {
         LOGE("Fail to create %s", GPSHAL_WORKER_THREAD_NAME);
-        return;  // error
+        return -1;  // error
     }
 
     gpshal_set_gps_state(GPSHAL_STATE_RESOURCE);
+    return 0;
 }
 
 int gpshal_gpscbs_save(GpsCallbacks_ext* src) {
 // assert(NULL != src);
     if (sizeof(GpsCallbacks_ext) == src->size) {
         LOGD("Use GpsCallbacks");
-        gpshal_resource_init(src);
-        return 0;
+        return gpshal_resource_init(src);
     }
     LOGE("Bad callback, size: %zd, expected: %zd",
             src->size, sizeof(GpsCallbacks_ext));