]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
Remove signal handlers on UNLOAD
authormartin f. krafft <redacted>
Sun, 19 Sep 2021 23:08:36 +0000 (01:08 +0200)
committermartin f. krafft <redacted>
Sun, 19 Sep 2021 23:14:35 +0000 (01:14 +0200)
If the script is unloaded, we must remove all signal handlers, or else
Irssi gets very unhappy.

Signed-off-by: martin f. krafft <redacted>
scripts/print_signals.pl

index dadd9eb7950af4e4d7b77ee83dae9e6320cfa978..29b3a4e9d0ce7cd390fae4a2a9fa7cd1804889a4 100644 (file)
@@ -270,11 +270,23 @@ my $signals = <<_END;
 "gui textbuffer line removed", TEXTBUFFER_VIEW_REC *view, LINE_REC *line, LINE_REC *prev_line
 _END
 
-foreach my $sigline (split(/\n/, $signals)) {
-       my ($sig, @args) = split(/, /, $sigline);
-       $sig =~ y/"//d;
-       Irssi::signal_add_first($sig, sub {
-                       signal_handler($sig, \@args, \@_);
-               }
-       );
-};
+my %handlers = ();
+
+sub load {
+       foreach my $sigline (split(/\n/, $signals)) {
+               my ($sig, @args) = split(/, /, $sigline);
+               $sig =~ y/"//d;
+               my $handler = sub { signal_handler($sig, \@args, \@_); };
+               Irssi::signal_add_first($sig, $handler);
+               $handlers{$sig} = $handler;
+       }
+}
+
+sub UNLOAD {
+       while (my ($sig, $handler) = each %handlers) {
+               Irssi::signal_remove($sig, $handler);
+       }
+       %handlers = ();
+}
+
+load();
git clone https://git.99rst.org/PROJECT