forked from extern/shorewall_code
Unify reference count adjustment
Signed-off-by: Tom Eastep <teastep@shorewall.net>
This commit is contained in:
parent
cf59d9ec68
commit
e9a94b0cfb
@ -722,6 +722,18 @@ sub add_tunnel_rule( $$ ) {
|
||||
insert_rule1( $chainref, $chainref->{new}++, $rule );
|
||||
}
|
||||
|
||||
#
|
||||
# Adjust reference counts after moving a rule from $name1 to $name2
|
||||
#
|
||||
sub adjust_reference_counts( $$$ ) {
|
||||
my ($toref, $name1, $name2) = @_;
|
||||
|
||||
if ( $toref ) {
|
||||
delete $toref->{references}{$name1} unless --$toref->{references}{$name1} > 0;
|
||||
$toref->{references}{$name2}++;
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Move the rules from one chain to another
|
||||
#
|
||||
@ -744,13 +756,7 @@ sub move_rules( $$ ) {
|
||||
$name1 =~ s/\+/\\+/;
|
||||
|
||||
for ( @{$chain1->{rules}} ) {
|
||||
if ( / -[jg] ([^\s]+)\b/ ) {
|
||||
my $toref = $tableref->{$1};
|
||||
if ( $toref ) {
|
||||
delete $toref->{references}{$name1} unless --$toref->{references}{$name1} > 0;
|
||||
$toref->{references}{$name2}++;
|
||||
}
|
||||
}
|
||||
adjust_reference_counts( $tableref->{$1}, $name1, $name2 ) if / -[jg] ([^\s]+)\b/;
|
||||
}
|
||||
|
||||
if ( $debug ) {
|
||||
@ -801,14 +807,8 @@ sub copy_rules( $$ ) {
|
||||
}
|
||||
|
||||
for ( @rules ) {
|
||||
if ( / -[jg] ([^\s]+)\b/ ) {
|
||||
my $toref = $tableref->{$1};
|
||||
if ( $toref ) {
|
||||
delete $toref->{references}{$name1} unless --$toref->{references}{$name1} > 0;
|
||||
$toref->{references}{$name2}++;
|
||||
}
|
||||
}
|
||||
}
|
||||
adjust_reference_counts( $tableref->{$1}, $name1, $name2 ) if / -[jg] ([^\s]+)\b/;
|
||||
}
|
||||
|
||||
push @$rules, @rules;
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user