projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
RT# 78190 Fix billing event/late fee on sectioned invoices
[freeside.git]
/
FS
/
FS
/
IP_Mixin.pm
diff --git
a/FS/FS/IP_Mixin.pm
b/FS/FS/IP_Mixin.pm
index
b3c1052
..
3ec7693
100644
(file)
--- a/
FS/FS/IP_Mixin.pm
+++ b/
FS/FS/IP_Mixin.pm
@@
-4,6
+4,7
@@
use strict;
use NetAddr::IP;
use FS::addr_block;
use FS::router;
use NetAddr::IP;
use FS::addr_block;
use FS::router;
+use FS::addr_range;
use FS::Record qw(qsearch);
use FS::Conf;
# careful about importing anything here--it will end up in a LOT of
use FS::Record qw(qsearch);
use FS::Conf;
# careful about importing anything here--it will end up in a LOT of
@@
-129,6
+130,10
@@
sub assign_ip_addr {
my $self = shift;
my %opt = @_;
my $self = shift;
my %opt = @_;
+ #otherwise we'll get the same assignment for concurrent identical calls
+ # this will serialize them
+ $_->lock_table foreach @subclasses;
+
my @blocks;
my $na = $self->NetAddr;
my @blocks;
my $na = $self->NetAddr;
@@
-152,14
+157,14
@@
sub assign_ip_addr {
# don't exit early on assigning a free address--check the rest of
# the blocks to see if the current address is in one of them.
if (!$new_addr) {
# don't exit early on assigning a free address--check the rest of
# the blocks to see if the current address is in one of them.
if (!$new_addr) {
- $new_addr = $block->next_free_addr
->addr
;
+ $new_addr = $block->next_free_addr;
$new_block = $block;
}
}
return 'No IP address available on this router' unless $new_addr;
$new_block = $block;
}
}
return 'No IP address available on this router' unless $new_addr;
- $self->ip_addr($new_addr);
+ $self->ip_addr($new_addr
->addr
);
$self->addr_block($new_block);
'';
}
$self->addr_block($new_block);
'';
}