]> git.ipfire.org Git - thirdparty/glibc.git/commit
Remove unnecessary locking when reading iconv configuration [BZ #22062]
authorArjun Shankar <arjun@redhat.com>
Wed, 17 Oct 2018 15:47:29 +0000 (17:47 +0200)
committerArjun Shankar <arjun@redhat.com>
Wed, 17 Oct 2018 15:47:29 +0000 (17:47 +0200)
commitc5288d378ad258d2e8e8cb174be3b9f233a312eb
treea987e28461c55a9d7011f046f382beaaa48cc93a
parent729f34028a7f494b599a29889df825cf826b6de0
Remove unnecessary locking when reading iconv configuration [BZ #22062]

In iconv/gconv_conf.c, __gconv_get_path unnecessarily obtains a lock when
populating the array pointed to by __gconv_path_elem. The locking is not
necessary because all calls to __gconv_read_conf (which in turn calls
__gconv_get_path) are serialized using __libc_once.

This patch:
- removes all locking in __gconv_get_path;
- replaces all explicitly serialized __gconv_read_conf calls with calls to
  __gconv_load_conf, a new wrapper that is serialized internally;
- adds a new test, iconv/tst-iconv_mt.c, to exercise iconv initialization,
  usage, and cleanup in a multi-threaded program;
- indents __gconv_get_path correctly, removing tab characters (which makes
  the patch look a little bigger than it really is).

After removing the unnecessary locking, it was confirmed that the test case
fails if the relevant __libc_once is removed. Additionally, four localedata
and iconvdata tests also fail. This gives confidence that the testsuite
sufficiently guards against some regressions relating to multi-threading
with iconv.

Tested on x86_64 and i686.
ChangeLog
iconv/Makefile
iconv/gconv_conf.c
iconv/gconv_db.c
iconv/gconv_int.h
iconv/tst-iconv-mt.c [new file with mode: 0644]