max_threads = LDAP_MAXTHR;
rc = ldap_pvt_thread_mutex_init(&pool->ltp_mutex);
- if (rc != 0)
+ if (rc != 0) {
+fail:
+ for (i=0; i<numqs; i++)
+ LDAP_FREE(pool->ltp_wqs[i]->ltp_free);
+ LDAP_FREE(pool->ltp_wqs);
+ LDAP_FREE(pool);
return(rc);
+ }
rc = ldap_pvt_thread_cond_init(&pool->ltp_cond);
if (rc != 0)
- return(rc);
+ goto fail;
rc = ldap_pvt_thread_cond_init(&pool->ltp_pcond);
if (rc != 0)
- return(rc);
+ goto fail;
rem_thr = max_threads % numqs;
rem_pend = max_pending % numqs;
void *ctx )
{
int i, j, len, clen, outpos, ucsoutlen, outsize, last;
+ int didnewbv = 0;
char *out, *outtmp, *s;
ac_uint4 *ucs, *p, *ucsout;
if ( !newbv ) {
newbv = ber_memalloc_x( sizeof(struct berval), ctx );
if ( !newbv ) return NULL;
+ didnewbv = 1;
}
/* Should first check to see if string is already in proper
outsize = len + 7;
out = (char *) ber_memalloc_x( outsize, ctx );
if ( out == NULL ) {
+fail:
+ if ( didnewbv )
+ ber_memfree_x( newbv, ctx );
return NULL;
}
outpos = 0;
outsize = len + 7;
out = (char *) ber_memalloc_x( outsize, ctx );
if ( out == NULL ) {
- return NULL;
+ goto fail;
}
outpos = i - 1;
memcpy(out, s, outpos);
outsize = len + 7;
out = (char *) ber_memalloc_x( outsize, ctx );
if ( out == NULL ) {
- return NULL;
+ goto fail;
}
outpos = 0;
i = 0;
p = ucs = ber_memalloc_x( len * sizeof(*ucs), ctx );
if ( ucs == NULL ) {
ber_memfree_x(out, ctx);
- return NULL;
+ goto fail;
}
/* convert character before first non-ascii to ucs-4 */
if ( clen == 0 ) {
ber_memfree_x( ucs, ctx );
ber_memfree_x( out, ctx );
- return NULL;
+ goto fail;
}
if ( clen == 1 ) {
/* ascii */
if ( (s[i] & 0xc0) != 0x80 ) {
ber_memfree_x( ucs, ctx );
ber_memfree_x( out, ctx );
- return NULL;
+ goto fail;
}
*p <<= 6;
*p |= s[i] & 0x3f;
ber_memfree_x( ucsout, ctx );
ber_memfree_x( ucs, ctx );
ber_memfree_x( out, ctx );
- return NULL;
+ goto fail;
}
out = outtmp;
}
if (outtmp == NULL) {
ber_memfree_x( ucs, ctx );
ber_memfree_x( out, ctx );
- return NULL;
+ goto fail;
}
out = outtmp;
}