On Mon, Jan 11, 2021 at 07:45:15PM +0530, Chandan Babu R wrote: > > 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(). Yep, thanks for catching that. --D > > +# 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