This is an automated email from the ASF dual-hosted git repository.

luckychen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new 3624206  Merge Release/20190925 into maser (#3044)
3624206 is described below

commit 362420665246b92c9a2e69fa4c72e08cb375b092
Author: YorkShen <[email protected]>
AuthorDate: Fri Nov 29 18:00:58 2019 +0800

    Merge Release/20190925 into maser (#3044)
    
    * Fix Poplayer multi Thread Native Crash
    
    * Revert "Fix Poplayer multi Thread Native Crash"
    
    This reverts commit 1d857d3df7100f5fac3856668ad8e71672c870ed.
    
    * [Android] fix memleak for apm
    
    * [Android] fix mmap leak and zombie process
    
    * [Android] fix cell animation ,same as ios
    
demo:https://jsplayground.taobao.org/raxplayground/073b16df-c0b0-4b13-a04f-64f3bcee13f9?spm=a2o8d.corp_prod_issue_detail_v2.0.0.3c40274fTD2suj
---
 .../sdk/src/main/java/org/apache/weex/bridge/WXParams.java  | 13 +++++++++++++
 .../apache/weex/ui/component/list/BasicListComponent.java   |  2 +-
 .../Source/android/multiprocess/weex_js_connection.cpp      |  9 ++++++++-
 weex_core/Source/android/utils/params_utils.cpp             | 10 ++++++++++
 weex_core/Source/core/manager/weex_core_manager.h           | 12 +++++++++++-
 weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp      |  1 +
 6 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java 
b/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java
index 66b98e6..7f2c265 100644
--- a/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java
+++ b/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java
@@ -19,6 +19,8 @@
 package org.apache.weex.bridge;
 
 import org.apache.weex.WXEnvironment;
+import org.apache.weex.WXSDKManager;
+import org.apache.weex.adapter.IWXConfigAdapter;
 import org.apache.weex.base.CalledByNative;
 import org.apache.weex.utils.WXLogUtils;
 
@@ -142,6 +144,17 @@ public class WXParams implements Serializable {
     return deviceWidth;
   }
 
+  @CalledByNative
+  public boolean getReleaseMap() {
+    IWXConfigAdapter adapter = WXSDKManager.getInstance().getWxConfigAdapter();
+    if (null == adapter){
+      return false;
+    }
+    String doRelease = adapter.getConfigWhenInit("wxapm","release_map","true");
+    WXLogUtils.e("getReleaseMap:"+doRelease);
+    return "true".equalsIgnoreCase(doRelease);
+  }
+
 
   /**
    * Device should not be set manually, instead it suppose to represent the 
width of device and
diff --git 
a/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
 
b/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
index ecbd621..d4b8f52 100644
--- 
a/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
+++ 
b/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
@@ -834,7 +834,7 @@ public abstract class BasicListComponent<T extends 
ViewGroup & ListComponentView
     }
 
     boolean isRemoveAnimation = false;
-    Object attr = getAttrs().get(Constants.Name.DELETE_CELL_ANIMATION);
+    Object attr = child.getAttrs().get(Constants.Name.DELETE_CELL_ANIMATION);
     if (Constants.Value.DEFAULT.equals(attr)) {
       isRemoveAnimation = true;
     }
diff --git a/weex_core/Source/android/multiprocess/weex_js_connection.cpp 
b/weex_core/Source/android/multiprocess/weex_js_connection.cpp
index 25e9673..51d25d9 100644
--- a/weex_core/Source/android/multiprocess/weex_js_connection.cpp
+++ b/weex_core/Source/android/multiprocess/weex_js_connection.cpp
@@ -181,10 +181,17 @@ static void *newIPCServer(void *_td) {
       listener->listen();
     } catch (IPCException &e) {
         LOGE("IPCException server died %s",e.msg());
-        base::android::DetachFromVM();
         WeexCore::WeexCoreManager::Instance()->server_queue_= nullptr;
+        if (WeexCoreManager::Instance()->do_release_map()){
+            futexPageQueue.reset();
+        }
+        base::android::DetachFromVM();
         pthread_exit(NULL);
     }
+    WeexCore::WeexCoreManager::Instance()->server_queue_= nullptr;
+    if (WeexCoreManager::Instance()->do_release_map()){
+        futexPageQueue.reset();
+    }
     return nullptr;
 }
 
diff --git a/weex_core/Source/android/utils/params_utils.cpp 
b/weex_core/Source/android/utils/params_utils.cpp
index 5c8d05f..abeaa86 100644
--- a/weex_core/Source/android/utils/params_utils.cpp
+++ b/weex_core/Source/android/utils/params_utils.cpp
@@ -17,6 +17,7 @@
  * under the License.
  */
 
+#include <core/manager/weex_core_manager.h>
 #include "android/utils/params_utils.h"
 #include "android/base/string/string_utils.h"
 #include "android/utils/so_utils.h"
@@ -221,6 +222,15 @@ std::vector<INIT_FRAMEWORK_PARAMS*> initFromParam(
     }
   }
 
+  jmethodID m_release_map =  env->GetMethodID(c_params, "getReleaseMap", 
"()Z");
+  if (m_release_map == nullptr) {
+    WeexCoreManager::Instance()->set_release_map(false);
+    LOGE("m_release_map method is missing");
+  } else {
+    jboolean j_release_map_bool = env->CallBooleanMethod(params,m_release_map);
+    WeexCoreManager::Instance()->set_release_map(j_release_map_bool==JNI_TRUE);
+  }
+
   jmethodID m_get_jsc_so_path =
           env->GetMethodID(c_params, "getLibJscPath", "()Ljava/lang/String;");
   if (m_get_jsc_so_path != nullptr) {
diff --git a/weex_core/Source/core/manager/weex_core_manager.h 
b/weex_core/Source/core/manager/weex_core_manager.h
index 018099a..e2b5fee 100644
--- a/weex_core/Source/core/manager/weex_core_manager.h
+++ b/weex_core/Source/core/manager/weex_core_manager.h
@@ -48,7 +48,12 @@ class WeexCoreManager {
   inline ScriptBridge *script_bridge() { return script_bridge_; }
 
   inline void set_script_bridge(ScriptBridge *script_bridge) {
+    ScriptBridge* pre_script_bridge  =  script_bridge_;
     script_bridge_ = script_bridge;
+    if (nullptr != pre_script_bridge && do_release_map()){
+        delete pre_script_bridge;
+        pre_script_bridge = nullptr;
+    }
   }
 
   inline void set_measure_function_adapter(MeasureFunctionAdapter *adapter) {
@@ -72,6 +77,9 @@ class WeexCoreManager {
 
   inline weex::base::Thread *script_thread() { return script_thread_; }
 
+  inline bool do_release_map() { return release_map_; }
+  inline void set_release_map(bool release) {  release_map_ = release; }
+
   IPCFutexPageQueue* client_queue_;
   IPCFutexPageQueue* server_queue_;
 
@@ -81,6 +89,7 @@ class WeexCoreManager {
   ScriptBridge *script_bridge_;
   ProjectMode project_mode_;
   weex::base::Thread *script_thread_;
+  volatile bool release_map_;
 
   WeexCoreManager()
       : platform_bridge_(nullptr),
@@ -89,7 +98,8 @@ class WeexCoreManager {
         project_mode_(COMMON),
         script_thread_(nullptr),
         client_queue_(nullptr),
-        server_queue_(nullptr){};
+        server_queue_(nullptr),
+        release_map_(false){};
   ~WeexCoreManager(){};
 };
 }  // namespace WeexCore
diff --git a/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp 
b/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp
index 23cf890..7f11493 100644
--- a/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp
+++ b/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp
@@ -63,6 +63,7 @@ IPCFutexPageQueue::~IPCFutexPageQueue()
     } catch (IPCException& e) {
         IPC_LOGE("%s", e.msg());
     }
+    IPC_LOGE("do munmap")
     munmap(m_sharedMemory, m_pageSize << 2);
 }
 

Reply via email to