DeleteLocalRef the result of GetObjectClass more consistently.

Should fix VM crashes in tests.java.sql.StressTest, which can now be
re-enabled.

I've also added a "throwoom" to the one place where this code
calls malloc but doesn't check the result.

Bug: 2213053
diff --git a/libcore/sql/src/main/native/sqlite_jni.c b/libcore/sql/src/main/native/sqlite_jni.c
index 1a23769..341ef2e 100644
--- a/libcore/sql/src/main/native/sqlite_jni.c
+++ b/libcore/sql/src/main/native/sqlite_jni.c
@@ -320,6 +320,10 @@
     if (haveutf) {
         const jsize utfLength = (*env)->GetStringUTFLength(env, src);
         dest->result = dest->tofree = malloc(utfLength + 1);
+        if (!dest->tofree) {
+            throwoom(env, "string translation failed");
+            return dest->result;
+        }
         (*env)->GetStringUTFRegion(env, src, 0, utfLength, dest->result);
         return dest->result;
     }
@@ -399,6 +403,7 @@
 					    "(Ljava/lang/String;I)Z");
 
 	if (mid == 0) {
+	    (*env)->DeleteLocalRef(env, cls);
 	    return ret;
 	}
 	trans2utf(env, h->haveutf, h->enc, table, &tabstr);
@@ -406,6 +411,7 @@
 					(jint) count)
 	      != JNI_FALSE;
 	(*env)->DeleteLocalRef(env, tabstr.jstr);
+	(*env)->DeleteLocalRef(env, cls);
     }
     return ret;
 }
@@ -425,10 +431,12 @@
 					    "(Ljava/lang/String;I)Z");
 
 	if (mid == 0) {
+	    (*env)->DeleteLocalRef(env, cls);
 	    return ret;
 	}
 	ret = (*env)->CallBooleanMethod(env, h->bh, mid, 0, (jint) count)
 	    != JNI_FALSE;
+	(*env)->DeleteLocalRef(env, cls);
     }
     return ret;
 }
@@ -446,9 +454,11 @@
 	jmethodID mid = (*env)->GetMethodID(env, cls, "progress", "()Z");
 
 	if (mid == 0) {
+	    (*env)->DeleteLocalRef(env, cls);
 	    return ret;
 	}
 	ret = (*env)->CallBooleanMethod(env, h->ph, mid) != JNI_TRUE;
+	(*env)->DeleteLocalRef(env, cls);
     }
     return ret;
 }
@@ -1591,6 +1601,7 @@
 	int i;
 
 	if (mid == 0) {
+	    (*env)->DeleteLocalRef(env, cls);
 	    return;
 	}
 	arr = (*env)->NewObjectArray(env, nargs, C_java_lang_String, 0);
@@ -1639,6 +1650,7 @@
 	jmethodID mid = (*env)->GetMethodID(env, cls, "last_step",
 					    "(LSQLite/FunctionContext;)V");
 	if (mid == 0) {
+	    (*env)->DeleteLocalRef(env, cls);
 	    return;
 	}
 	f->sf = sf;
@@ -1665,6 +1677,7 @@
 	int i;
 
 	if (mid == 0) {
+	    (*env)->DeleteLocalRef(env, cls);
 	    return;
 	}
 	arr = (*env)->NewObjectArray(env, nargs, C_java_lang_String, 0);
@@ -1714,6 +1727,7 @@
 	jmethodID mid = (*env)->GetMethodID(env, cls, "last_step",
 					    "(LSQLite/FunctionContext;)V");
 	if (mid == 0) {
+	    (*env)->DeleteLocalRef(env, cls);
 	    return;
 	}
 	f->sf = sf;
diff --git a/libcore/sql/src/test/java/tests/java/sql/StressTest.java b/libcore/sql/src/test/java/tests/java/sql/StressTest.java
index 8b80690..b6d13c1 100755
--- a/libcore/sql/src/test/java/tests/java/sql/StressTest.java
+++ b/libcore/sql/src/test/java/tests/java/sql/StressTest.java
@@ -219,7 +219,6 @@
             clazz = Driver.class,
             args = {String.class, Properties.class}
     )
-    @BrokenTest("2191557 ReferenceTable overflow")
     public void testInsertOfManyRowsUsingManyThreads() {
         Logger.global.info("java.sql stress test: multiple threads and many operations.");