From: mturk Date: Sat, 16 Dec 2006 11:05:57 +0000 (+0000) Subject: Backport the current connectors trunk. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=959d5222d67b5294b0348b1702e7900e9891d6c9;p=tomcat7.0 Backport the current connectors trunk. git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@487786 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/native/connector/src/network.c b/native/connector/src/network.c index 8a5e6de72..f6ece1148 100644 --- a/native/connector/src/network.c +++ b/native/connector/src/network.c @@ -226,7 +226,7 @@ TCN_IMPLEMENT_CALL(void, Socket, destroy)(TCN_STDARGS, jlong sock) s->sock = NULL; apr_socket_close(as); } - + apr_pool_destroy(s->pool); } @@ -439,14 +439,14 @@ TCN_IMPLEMENT_CALL(jint, Socket, send)(TCN_STDARGS, jlong sock, if (tosend <= TCN_BUFFER_SZ) { jbyte sb[TCN_BUFFER_SZ]; (*e)->GetByteArrayRegion(e, buf, offset, tosend, &sb[0]); - ss = (*s->net->send)(s->opaque, sb, &nbytes); + ss = (*s->net->send)(s->opaque, (const char *)&sb[0], &nbytes); } else { jbyte *sb = (jbyte *)malloc(nbytes); if (sb == NULL) return -APR_ENOMEM; (*e)->GetByteArrayRegion(e, buf, offset, tosend, sb); - ss = (*s->net->send)(s->opaque, sb, &nbytes); + ss = (*s->net->send)(s->opaque, (const char *)sb, &nbytes); free(sb); } if (ss == APR_SUCCESS) @@ -701,27 +701,40 @@ TCN_IMPLEMENT_CALL(jint, Socket, recvt)(TCN_STDARGS, jlong sock, tcn_socket_t *s = J2P(sock, tcn_socket_t *); apr_size_t nbytes = (apr_size_t)toread; apr_status_t ss; + apr_interval_time_t pt; + apr_interval_time_t nt = J2T(timeout); UNREFERENCED(o); TCN_ASSERT(sock != 0); TCN_ASSERT(s->opaque != NULL); TCN_ASSERT(buf != NULL); - if ((ss = (*s->net->timeout_set)(s->opaque, J2T(timeout))) != APR_SUCCESS) - goto cleanup; + if ((ss = (*s->net->timeout_get)(s->opaque, &pt)) != APR_SUCCESS) { + TCN_ERROR_WRAP(ss); + return -(jint)ss; + } + if (pt != nt) { + if ((ss = (*s->net->timeout_set)(s->opaque, nt)) != APR_SUCCESS) + goto cleanup; + } if (toread <= TCN_BUFFER_SZ) { jbyte sb[TCN_BUFFER_SZ]; - if ((ss = (*s->net->recv)(s->opaque, sb, &nbytes)) == APR_SUCCESS) + if ((ss = (*s->net->recv)(s->opaque, (char *)&sb[0], &nbytes)) == APR_SUCCESS) (*e)->SetByteArrayRegion(e, buf, offset, (jsize)nbytes, &sb[0]); } else { jbyte *sb = (jbyte *)malloc(nbytes); if (sb == NULL) return -APR_ENOMEM; - if ((ss = (*s->net->recv)(s->opaque, sb, &nbytes)) == APR_SUCCESS) + if ((ss = (*s->net->recv)(s->opaque, (char *)sb, &nbytes)) == APR_SUCCESS) (*e)->SetByteArrayRegion(e, buf, offset, (jsize)nbytes, &sb[0]); free(sb); } + if (pt != nt) { + if ((ss = (*s->net->timeout_set)(s->opaque, pt)) != APR_SUCCESS) + goto cleanup; + } + #ifdef TCN_DO_STATISTICS if (ss == APR_SUCCESS) { sp_max_recv = TCN_MAX(sp_max_recv, nbytes); @@ -854,6 +867,8 @@ TCN_IMPLEMENT_CALL(jint, Socket, recvbt)(TCN_STDARGS, jlong sock, apr_status_t ss; apr_size_t nbytes = (apr_size_t)len; char *bytes; + apr_interval_time_t pt; + apr_interval_time_t nt = J2T(timeout); UNREFERENCED(o); if (!sock) { @@ -866,9 +881,24 @@ TCN_IMPLEMENT_CALL(jint, Socket, recvbt)(TCN_STDARGS, jlong sock, bytes = (char *)(*e)->GetDirectBufferAddress(e, buf); TCN_ASSERT(bytes != NULL); - if ((ss = (*s->net->timeout_set)(s->opaque, J2T(timeout))) != APR_SUCCESS) - return -(jint)ss; + if ((ss = (*s->net->timeout_get)(s->opaque, &pt)) != APR_SUCCESS) { + TCN_ERROR_WRAP(ss); + return -(jint)ss; + } + if (pt != nt) { + if ((ss = (*s->net->timeout_set)(s->opaque, nt)) != APR_SUCCESS) { + TCN_ERROR_WRAP(ss); + return -(jint)ss; + } + } ss = (*s->net->recv)(s->opaque, bytes + offset, &nbytes); + if (pt != nt) { + if ((ss = (*s->net->timeout_set)(s->opaque, pt)) != APR_SUCCESS) { + TCN_ERROR_WRAP(ss); + return -(jint)ss; + } + } + #ifdef TCN_DO_STATISTICS if (ss == APR_SUCCESS) { sp_max_recv = TCN_MAX(sp_max_recv, nbytes); @@ -905,6 +935,8 @@ TCN_IMPLEMENT_CALL(jint, Socket, recvbbt)(TCN_STDARGS, jlong sock, tcn_socket_t *s = J2P(sock, tcn_socket_t *); apr_status_t ss; apr_size_t nbytes = (apr_size_t)len; + apr_interval_time_t pt; + apr_interval_time_t nt = J2T(timeout); UNREFERENCED_STDARGS; UNREFERENCED(o); @@ -916,9 +948,24 @@ TCN_IMPLEMENT_CALL(jint, Socket, recvbbt)(TCN_STDARGS, jlong sock, TCN_ASSERT(s->opaque != NULL); - if ((ss = (*s->net->timeout_set)(s->opaque, J2T(timeout))) != APR_SUCCESS) - return -(jint)ss; + if ((ss = (*s->net->timeout_get)(s->opaque, &pt)) != APR_SUCCESS) { + TCN_ERROR_WRAP(ss); + return -(jint)ss; + } + if (pt != nt) { + if ((ss = (*s->net->timeout_set)(s->opaque, nt)) != APR_SUCCESS) { + TCN_ERROR_WRAP(ss); + return -(jint)ss; + } + } ss = (*s->net->recv)(s->opaque, s->jrbbuff + offset, &nbytes); + if (pt != nt) { + if ((ss = (*s->net->timeout_set)(s->opaque, pt)) != APR_SUCCESS) { + TCN_ERROR_WRAP(ss); + return -(jint)ss; + } + } + #ifdef TCN_DO_STATISTICS if (ss == APR_SUCCESS) { sp_max_recv = TCN_MAX(sp_max_recv, nbytes); @@ -1018,7 +1065,7 @@ TCN_IMPLEMENT_CALL(jint, Socket, timeoutSet)(TCN_STDARGS, jlong sock, if (!sock) { tcn_ThrowAPRException(e, APR_ENOTSOCK); return APR_ENOTSOCK; - } + } return (jint)(*s->net->timeout_set)(s->opaque, J2T(timeout)); } @@ -1031,7 +1078,7 @@ TCN_IMPLEMENT_CALL(jlong, Socket, timeoutGet)(TCN_STDARGS, jlong sock) if (!sock) { tcn_ThrowAPRException(e, APR_ENOTSOCK); return 0; - } + } TCN_ASSERT(s->opaque != NULL); TCN_THROW_IF_ERR((*s->net->timeout_get)(s->opaque, &timeout), timeout);