user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH 3/6] hlmod: make into a singleton
  2019-02-05 11:10  6% [PATCH 0/6] highlighting cleanups + help update Eric Wong
@ 2019-02-05 11:10  7% ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2019-02-05 11:10 UTC (permalink / raw)
  To: meta

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 -----
 t/hl_mod.t                 | 15 ---------------
 3 files changed, 13 insertions(+), 40 deletions(-)

diff --git a/lib/PublicInbox/HlMod.pm b/lib/PublicInbox/HlMod.pm
index 284e4b1..13f27d1 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 acdd822..0fb6b64 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
diff --git a/t/hl_mod.t b/t/hl_mod.t
index 238f8ec..f2eb5f9 100644
--- a/t/hl_mod.t
+++ b/t/hl_mod.t
@@ -40,19 +40,4 @@ my $orig = $str;
 	}
 }
 
-my $nr = $ENV{TEST_MEMLEAK};
-if ($nr && -r "/proc/$$/status") {
-	my $fh;
-	open $fh, '<', "/proc/$$/status";
-	diag "starting at memtest at ".join('', grep(/VmRSS:/, <$fh>));
-	PublicInbox::HlMod->new->do_hl(\$orig) for (1..$nr);
-	open $fh, '<', "/proc/$$/status";
-	diag "creating $nr instances: ".join('', grep(/VmRSS:/, <$fh>));
-	my $hls = PublicInbox::HlMod->new;
-	$hls->do_hl(\$orig) for (1..$nr);
-	$hls = undef;
-	open $fh, '<', "/proc/$$/status";
-	diag "reused instance $nr times: ".join('', grep(/VmRSS:/, <$fh>));
-}
-
 done_testing;
-- 
EW


^ permalink raw reply related	[relevance 7%]

* [PATCH 0/6] highlighting cleanups + help update
@ 2019-02-05 11:10  6% Eric Wong
  2019-02-05 11:10  7% ` [PATCH 3/6] hlmod: make into a singleton Eric Wong
  0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2019-02-05 11:10 UTC (permalink / raw)
  To: meta

Experimenting with using Markdown-style "```$LANG" blocks
support for our user documentation.  It makes the CSS
example easier-to-follow when the CSS source is in front
of the user.

Markdown-style blocks definitely won't be enabled by default for
emails.  I don't want to encourage people to use Markdown in
emails (as that inevitably ends with "which flavor?") and the
same mess with privacy/compatibility problems have with HTML
mail.

But preserving the WYSIWYG nature of plain-text while allowing a
tiny subset of Markdown (we already respect it for
linkification) might be useful for mailing lists which forward
messages from Markdown-supported forums/trackers (e.g. Redmine
and ruby-core mailing list).

Eric Wong (6):
  viewvcs: cleanup utf8 handling
  hlmod: hoist out do_hl_lang sub
  hlmod: make into a singleton
  hlmod: do_hl* performs src_escape immediately
  hlmod: support "```$LANG" blocks in text
  wwwtext: inline sample CSS and use highlight

 contrib/css/216dark.css        | 30 ++++++++++--------
 lib/PublicInbox/HlMod.pm       | 70 ++++++++++++++++++++++++++++--------------
 lib/PublicInbox/UserContent.pm | 16 +++++-----
 lib/PublicInbox/ViewVCS.pm     | 14 ++-------
 lib/PublicInbox/WwwText.pm     | 35 ++++++++++-----------
 t/hl_mod.t                     | 34 ++++++++++++--------
 6 files changed, 114 insertions(+), 85 deletions(-)

-- 
EW


^ permalink raw reply	[relevance 6%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2019-02-05 11:10  6% [PATCH 0/6] highlighting cleanups + help update Eric Wong
2019-02-05 11:10  7% ` [PATCH 3/6] hlmod: make into a singleton Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).