On 09 Jan 2021 at 11:58, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > Make sure we actually load and unload libicu properly. This isn't > strictly required since the library can bootstrap itself, but unloading > means fewer things for valgrind to complain about. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- > scrub/unicrash.c | 17 +++++++++++++++++ > scrub/unicrash.h | 4 ++++ > scrub/xfs_scrub.c | 6 ++++++ > 3 files changed, 27 insertions(+) > > > diff --git a/scrub/unicrash.c b/scrub/unicrash.c > index d5d2cf20..de3217c2 100644 > --- a/scrub/unicrash.c > +++ b/scrub/unicrash.c > @@ -722,3 +722,20 @@ unicrash_check_fs_label( > return __unicrash_check_name(uc, dsc, _("filesystem label"), > label, 0); > } > + > +/* Load libicu and initialize it. */ > +bool > +unicrash_load(void) > +{ > + UErrorCode uerr = U_ZERO_ERROR; > + > + u_init(&uerr); > + return U_FAILURE(uerr); > +} > + > +/* Unload libicu once we're done with it. */ > +void > +unicrash_unload(void) > +{ > + u_cleanup(); > +} > diff --git a/scrub/unicrash.h b/scrub/unicrash.h > index c3a7f385..32cae3d4 100644 > --- a/scrub/unicrash.h > +++ b/scrub/unicrash.h > @@ -25,6 +25,8 @@ int unicrash_check_xattr_name(struct unicrash *uc, struct descr *dsc, > const char *attrname); > int unicrash_check_fs_label(struct unicrash *uc, struct descr *dsc, > const char *label); > +bool unicrash_load(void); > +void unicrash_unload(void); > #else > # define unicrash_dir_init(u, c, b) (0) > # define unicrash_xattr_init(u, c, b) (0) > @@ -33,6 +35,8 @@ int unicrash_check_fs_label(struct unicrash *uc, struct descr *dsc, > # define unicrash_check_dir_name(u, d, n) (0) > # define unicrash_check_xattr_name(u, d, n) (0) > # define unicrash_check_fs_label(u, d, n) (0) > +# define unicrash_init() (0) The above should probably be defining unicrash_load(). > +# define unicrash_unload() do { } while (0) > #endif /* HAVE_LIBICU */ > > #endif /* XFS_SCRUB_UNICRASH_H_ */ > diff --git a/scrub/xfs_scrub.c b/scrub/xfs_scrub.c > index 1edeb150..6b202912 100644 > --- a/scrub/xfs_scrub.c > +++ b/scrub/xfs_scrub.c > @@ -603,6 +603,11 @@ main( > setlocale(LC_ALL, ""); > bindtextdomain(PACKAGE, LOCALEDIR); > textdomain(PACKAGE); > + if (unicrash_load()) { > + fprintf(stderr, > + _("%s: could initialize Unicode library.\n"), progname); > + goto out; > + } > > pthread_mutex_init(&ctx.lock, NULL); > ctx.mode = SCRUB_MODE_REPAIR; > @@ -788,6 +793,7 @@ main( > phase_end(&all_pi, 0); > if (progress_fp) > fclose(progress_fp); > + unicrash_unload(); > > /* > * If we're being run as a service, the return code must fit the LSB -- chandan