[merged]
1.MT2735_MP1_MR1.0 merged,without MR1.0-dpramk

Change-Id: I652723435ec940ee8c0b9bc6ff2d6e80557a0429
diff --git a/framework/lynq-ril-service/src/common.cpp b/framework/lynq-ril-service/src/common.cpp
index e385e1c..37e5c41 100755
--- a/framework/lynq-ril-service/src/common.cpp
+++ b/framework/lynq-ril-service/src/common.cpp
@@ -1,4 +1,5 @@
- /*
+// SPDX-License-Identifier: MediaTekProprietary
+/*
  * Copyright (C) 2006 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,6 +37,7 @@
 #include "utils.h"
 #include "data.h"
 #include "cc.h"
+
 static pthread_mutex_t s_DataMutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t s_DataCond = PTHREAD_COND_INITIALIZER;
 
@@ -783,21 +785,29 @@
                 writeStringToParcel(p, items[1].c_str());
             } else if(items[0] == std::string("REQ")) {
                 int request = std::stoi(items[1]);
+
+                // For loop, free before reassign to avoid memory leak
+                if (pRI != NULL) {
+                    free(pRI);
+                }
                 pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID) ((0)));
             }
         } else {
             RLOGD("%s, too many \"=\"");
         }
     }
+
     if(pRI && pRI->pCI) {
         p.setDataPosition(pos);
         pRI->pCI->dispatchFunction(p, pRI);
-    } else {
-        if(pRI) {
-            free(pRI);
-            pRI = NULL;
-        }
     }
+
+    // Free to avoid memory leak
+    if(pRI != NULL) {
+        free(pRI);
+        pRI = NULL;
+    }
+
     return true;
 }
 int lynqSocketSendto(int fd,struct sockaddr *dest_addr,int addr_len,char msg[])