mturk 2005/06/09 03:24:53
Modified: jni/native/src ssl.c
Log:
Check for exceptions when allocating a new byte array.
Also use critial methods instead array copying.
On each call delete a local reference to the object so that
GC clears that ASAP.
Revision Changes Path
1.30 +18 -17 jakarta-tomcat-connectors/jni/native/src/ssl.c
Index: ssl.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/ssl.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- ssl.c 9 Jun 2005 09:33:40 -0000 1.29
+++ ssl.c 9 Jun 2005 10:24:53 -0000 1.30
@@ -547,36 +547,37 @@
static int jbs_write(BIO *b, const char *in, int inl)
{
- int ret = 0;
+ jint ret = 0;
if (b->init && in != NULL) {
BIO_JAVA *j = (BIO_JAVA *)b->ptr;
JNIEnv *e = j->cb.env;
jbyteArray jb = (*e)->NewByteArray(e, inl);
- (*e)->SetByteArrayRegion(e, jb, 0, inl, (jbyte *)in);
- jint o = (*e)->CallIntMethod(e, j->cb.obj,
- j->cb.mid[0], jb);
- (*e)->ReleaseByteArrayElements(e, jb, (jbyte *)in, 0);
- ret = o;
+ if (!(*e)->ExceptionOccurred(e)) {
+ (*e)->SetByteArrayRegion(e, jb, 0, inl, (jbyte *)in);
+ ret = (*e)->CallIntMethod(e, j->cb.obj,
+ j->cb.mid[0], jb);
+ (*e)->DeleteLocalRef(e, jb);
+ }
}
return ret;
}
static int jbs_read(BIO *b, char *out, int outl)
{
- int ret = 0;
+ jint ret = 0;
if (b->init && out != NULL) {
BIO_JAVA *j = (BIO_JAVA *)b->ptr;
JNIEnv *e = j->cb.env;
jbyteArray jb = (*e)->NewByteArray(e, outl);
-
- jint o = (*e)->CallObjectMethod(e, j->cb.obj,
- j->cb.mid[1], jb);
- if (o>=0) {
- int i;
- jbyte *jout = (*e)->GetByteArrayElements(e, jb, 0);
- memcpy(out, jout, o);
- (*e)->ReleaseByteArrayElements(e, jb, jout, 0);
- ret = o;
+ if (!(*e)->ExceptionOccurred(e)) {
+ ret = (*e)->CallIntMethod(e, j->cb.obj,
+ j->cb.mid[1], jb);
+ if (ret > 0) {
+ jbyte *jout = (*e)->GetPrimitiveArrayCritical(e, jb, NULL);
+ memcpy(out, jout, ret);
+ (*e)->ReleasePrimitiveArrayCritical(e, jb, jout, 0);
+ }
+ (*e)->DeleteLocalRef(e, jb);
}
}
return ret;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]