From: Ulrich Drepper Date: Wed, 8 Dec 1999 16:51:14 +0000 (+0000) Subject: Correctly transfer last patch from 2.2 branch. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=deb5e0dfd73db89c41c2b8398e6817d668b7f5fd;p=thirdparty%2Fglibc.git Correctly transfer last patch from 2.2 branch. --- diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c index 53cffa4dc73..0d2f1a03e92 100644 --- a/iconv/gconv_db.c +++ b/iconv/gconv_db.c @@ -284,24 +284,24 @@ gen_steps (struct derivation_step *best, const char *toset, #ifndef STATIC_GCONV static int internal_function -increment_counter (struct __gconv_step *steps, size_t nsteps) +increment_counter (struct gconv_step *steps, size_t nsteps) { /* Increment the user counter. */ size_t cnt = nsteps; - int result = __GCONV_OK; + int result = GCONV_OK; while (cnt-- > 0) - if (steps[cnt].__counter++ == 0) + if (steps[cnt].counter++ == 0) { - steps[cnt].__shlib_handle = - __gconv_find_shlib (steps[cnt].__modname); - if (steps[cnt].__shlib_handle == NULL) + steps[cnt].shlib_handle = + __gconv_find_shlib (steps[cnt].modname); + if (steps[cnt].shlib_handle == NULL) { /* Oops, this is the second time we use this module (after unloading) and this time loading failed!? */ while (++cnt < nsteps) - __gconv_release_shlib (steps[cnt].__shlib_handle); - result = __GCONV_NOCONV; + __gconv_release_shlib (steps[cnt].shlib_handle); + result = GCONV_NOCONV; break; } } @@ -318,19 +318,11 @@ find_derivation (const char *toset, const char *toset_expand, const char *fromset, const char *fromset_expand, struct gconv_step **handle, size_t *nsteps) { - __libc_lock_define_initialized (static, lock) struct derivation_step *first, *current, **lastp, *solution = NULL; int best_cost_hi = INT_MAX; int best_cost_lo = INT_MAX; int result; - result = derivation_lookup (fromset_expand ?: fromset, toset_expand ?: toset, - handle, nsteps); - if (result == GCONV_OK) - return result; - - __libc_lock_lock (lock); - /* There is a small chance that this derivation is meanwhile found. This can happen if in `find_derivation' we look for this derivation, didn't find it but at the same time another thread looked for this derivation. */ @@ -338,7 +330,9 @@ find_derivation (const char *toset, const char *toset_expand, handle, nsteps); if (result == GCONV_OK) { - __libc_lock_unlock (lock); +#ifndef STATIC_GCONV + result = increment_counter (*handle, *nsteps); +#endif return result; } @@ -633,8 +627,6 @@ find_derivation (const char *toset, const char *toset_expand, add_derivation (fromset_expand ?: fromset, toset_expand ?: toset, *handle, *nsteps); - __libc_lock_unlock (lock); - return result; }