From d38dd2de23986dba846fae8454d60b6711b964b3 Mon Sep 17 00:00:00 2001 From: Bernard Normier Date: Tue, 24 Oct 2006 01:59:22 +0000 Subject: ImplicitContext test and fixes --- cpp/src/Ice/ImplicitContextI.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'cpp/src/Ice/ImplicitContextI.cpp') diff --git a/cpp/src/Ice/ImplicitContextI.cpp b/cpp/src/Ice/ImplicitContextI.cpp index ab57af890d9..b6b8294210b 100644 --- a/cpp/src/Ice/ImplicitContextI.cpp +++ b/cpp/src/Ice/ImplicitContextI.cpp @@ -362,7 +362,7 @@ PerThreadImplicitContext::getThreadContext(bool allocate) const return 0; } - val = new std::vector(_index); + val = new std::vector(_index + 1); #ifdef _WIN32 if(TlsSetValue(_key, val) != 0) { @@ -377,7 +377,7 @@ PerThreadImplicitContext::getThreadContext(bool allocate) const } else { - if(val->size() < _index) + if(val->size() <= _index) { if(!allocate) { @@ -386,6 +386,7 @@ PerThreadImplicitContext::getThreadContext(bool allocate) const else { val->resize(_index + 1); + assert((*val)[_index] == 0); } } } @@ -409,8 +410,9 @@ PerThreadImplicitContext::clearThreadContext() const #else ContextVector* val = static_cast(pthread_getspecific(_key)); #endif - if(val != 0 && val->size() < _index) + if(val != 0 && _index < val->size()) { + delete (*val)[_index]; (*val)[_index] = 0; int i = val->size() - 1; @@ -465,6 +467,7 @@ PerThreadImplicitContext::setContext(const Context& newContext) else { Context* ctx = getThreadContext(true); + assert(ctx != 0); *ctx = newContext; } } -- cgit v1.2.3