Merge "Synchronize calls to Matcher.closeImpl."
diff --git a/luni/src/main/java/java/util/regex/Matcher.java b/luni/src/main/java/java/util/regex/Matcher.java
index cfd4432..ce2dfe7 100644
--- a/luni/src/main/java/java/util/regex/Matcher.java
+++ b/luni/src/main/java/java/util/regex/Matcher.java
@@ -229,11 +229,13 @@
 
         this.pattern = pattern;
 
-        if (address != 0) {
-            closeImpl(address);
-            address = 0;
+        synchronized (this) {
+            if (address != 0) {
+                closeImpl(address);
+                address = 0; // In case openImpl throws.
+            }
+            address = openImpl(pattern.address);
         }
-        address = openImpl(pattern.address);
 
         if (input != null) {
             resetForInput();
@@ -634,7 +636,9 @@
 
     @Override protected void finalize() throws Throwable {
         try {
-            closeImpl(address);
+            synchronized (this) {
+                closeImpl(address);
+            }
         } finally {
             super.finalize();
         }