You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/02/06 20:14:50 UTC
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_objCache.c
costin 02/02/06 11:14:50
Modified: jk/native2/common jk_objCache.c
Log:
- a more efficient and natural alghoritm - instead of searching in the
array for an object, we use a normal stack.
- allow the cache to grow, if -1 is set as size
Revision Changes Path
1.4 +42 -34 jakarta-tomcat-connectors/jk/native2/common/jk_objCache.c
Index: jk_objCache.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_objCache.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- jk_objCache.c 16 Dec 2001 23:29:55 -0000 1.3
+++ jk_objCache.c 6 Feb 2002 19:14:50 -0000 1.4
@@ -69,25 +69,34 @@
{
int rc;
-/* if( _this->debug > 0 ) */
-/* _this->l->jkLog(_this->l, JK_LOG_DEBUG, "Cache put\n"); */
-
- if(_this->ep_cache_sz <= 0 )
+ if(_this->size <= 0 )
return JK_FALSE;
JK_ENTER_CS(&_this->cs, rc);
- if(rc) {
- int i;
-
- for(i = 0 ; i < _this->ep_cache_sz ; i++) {
- if(!_this->ep_cache[i]) {
- _this->ep_cache[i] = obj;
- break;
- }
+ if(rc==JK_TRUE) {
+
+ rc=JK_FALSE;
+
+ if( _this->count >= _this->size && _this->maxSize== -1 ) {
+ /* Realloc */
+ void **oldData=_this->data;
+ _this->data =
+ (void **)_this->pool->calloc(env, _this->pool,
+ 2 * sizeof(void *) * _this->size);
+ memcpy( _this->data, oldData, _this->size );
+ _this->size *= 2;
+ /* XXX Can we destroy the old data ? Probably not.
+ It may be better to have a list - but it's unlikely
+ we'll have too many reallocations */
}
+
+ if( _this->count < _this->size ) {
+ _this->data[_this->count++]=obj;
+ }
+
JK_LEAVE_CS(&_this->cs, rc);
- if(i < _this->ep_cache_sz) {
+ if(rc) {
/* l->jkLog(l, JK_LOG_DEBUG, "Return endpoint to pool\n"); */
return JK_TRUE;
}
@@ -101,11 +110,19 @@
jk_objCache_init(jk_env_t *env, jk_objCache_t *_this, int cacheSize ) {
int i;
- _this->ep_cache =
+ if( cacheSize <= 0 ) {
+ _this->size= 64;
+ } else {
+ _this->size= cacheSize ;
+ }
+ _this->count=0;
+ _this->maxSize=cacheSize;
+
+ _this->data =
(void **)_this->pool->calloc(env, _this->pool,
- sizeof(void *) * cacheSize);
+ sizeof(void *) * _this->size);
- if( _this->ep_cache==NULL )
+ if( _this->data==NULL )
return JK_FALSE;
JK_INIT_CS(&(_this->cs), i);
@@ -115,11 +132,6 @@
return JK_FALSE;
}
- for(i = 0 ; i < cacheSize ; i++) {
- _this->ep_cache[i] = NULL;
- }
-
- _this->ep_cache_sz=cacheSize;
return JK_TRUE;
}
@@ -129,7 +141,7 @@
JK_DELETE_CS(&(_this->cs), i);
- _this->ep_cache_sz=0;
+ _this->count=0;
/* Nothing to free, we use pools */
return JK_TRUE;
@@ -142,21 +154,13 @@
int rc;
void *ae=NULL;
- if (_this->ep_cache_sz <= 0 )
- return NULL;
-
-
JK_ENTER_CS(&_this->cs, rc);
if (rc) {
- int i;
-
- for (i = 0 ; i < _this->ep_cache_sz ; i++) {
- if (_this->ep_cache[i]) {
- ae = _this->ep_cache[i];
- _this->ep_cache[i] = NULL;
- break;
- }
+ if( _this->count > 0 ) {
+ _this->count--;
+ ae=_this->data[ _this->count ];
}
+
JK_LEAVE_CS(&_this->cs, rc);
return ae;
@@ -168,6 +172,10 @@
jk_objCache_t *_this=pool->calloc( env, pool, sizeof( jk_objCache_t ));
_this->pool=pool;
+
+ _this->count=0;
+ _this->size=0;
+ _this->maxSize=-1;
_this->get=jk_objCache_get;
_this->put=jk_objCache_put;
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>