From 8eb2c4f7c0aed11810280c6dfa63f75fd961e3cd Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 2 Feb 2019 07:35:06 +0000 Subject: hlmod: make into a singleton It turns out there's no point in having multiple instances of this or having to worry about destruction or destruction ordering. This will make it easier to reuse the one instance we have across different modules. --- lib/PublicInbox/HlMod.pm | 33 +++++++++++++-------------------- lib/PublicInbox/ViewVCS.pm | 5 ----- 2 files changed, 13 insertions(+), 25 deletions(-) (limited to 'lib') diff --git a/lib/PublicInbox/HlMod.pm b/lib/PublicInbox/HlMod.pm index 284e4b18..13f27d19 100644 --- a/lib/PublicInbox/HlMod.pm +++ b/lib/PublicInbox/HlMod.pm @@ -16,6 +16,7 @@ package PublicInbox::HlMod; use strict; use warnings; use highlight; # SWIG-generated stuff +my $hl; sub _parse_filetypes ($) { my $ft_conf = $_[0]->searchFile('filetypes.conf') or @@ -52,16 +53,20 @@ sub _parse_filetypes ($) { (\%ext2lang, \@shebang); } +# We only need one instance, so we don't need to do +# highlight::CodeGenerator::deleteInstance sub new { my ($class) = @_; - my $dir = highlight::DataDir->new; - $dir->initSearchDirectories(''); - my ($ext2lang, $shebang) = _parse_filetypes($dir); - bless { - -dir => $dir, - -ext2lang => $ext2lang, - -shebang => $shebang, - }, $class; + $hl ||= do { + my $dir = highlight::DataDir->new; + $dir->initSearchDirectories(''); + my ($ext2lang, $shebang) = _parse_filetypes($dir); + bless { + -dir => $dir, + -ext2lang => $ext2lang, + -shebang => $shebang, + }, $class; + }; } sub _shebang2lang ($$) { @@ -120,16 +125,4 @@ sub do_hl_lang { \$out; } -# SWIG instances aren't reference-counted, but $self is; -# so we need to delete all the CodeGenerator instances manually -# at our own destruction -sub DESTROY { - my ($self) = @_; - foreach my $gen (values %$self) { - if (ref($gen) eq 'highlight::CodeGenerator') { - highlight::CodeGenerator::deleteInstance($gen); - } - } -} - 1; diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm index acdd822d..0fb6b64e 100644 --- a/lib/PublicInbox/ViewVCS.pm +++ b/lib/PublicInbox/ViewVCS.pm @@ -25,11 +25,6 @@ my $hl = eval { PublicInbox::HlMod->new; }; -# we need to trigger highlight::CodeGenerator::deleteInstance -# in HlMod::DESTROY before the rest of Perl shuts down to avoid -# a segfault at shutdown -END { $hl = undef }; - my %QP_MAP = ( A => 'oid_a', B => 'oid_b', a => 'path_a', b => 'path_b' ); my $max_size = 1024 * 1024; # TODO: configurable my $BIN_DETECT = 8000; # same as git -- cgit v1.2.3-24-ge0c7