+my $cleanup_leases = sub {
+ my ($self, $last_run) = @_;
+ my ($current, $last, $lease, $dirty);
+
+ $self->{INTERVAL} = 5 if $self->{INTERVAL} <= 0;
+ $current = time;
+ $last = $last_run + ($self->{INTERVAL} * 60);
+
+ $self->$logger("Run 'cleanup_leases' $last < $current", INFO);
+
+ if ($last < $current) {
+ $last_run = $current;
+ my $leases = $self->{_leases};
+ $dirty = 0;
+ while ((my $lease, my $elems) = each (%$leases)) {
+ $self->$logger("Clean up lease: $lease\n". Dumper($elems));
+ if ($elems->{ends} < $last_run) {
+ $self->$logger("Considering $lease for clean up: $elems->{ends} < $last_run\n". Dumper($elems));
+ if ($elems->{'binding state'} eq 'active') {
+ $self->$logger("Setting $lease 'binding state' to free", INFO);
+ $elems->{'binding state'} = 'free';
+ $dirty = 1;
+ }
+ }
+ }
+ if ($dirty) {
+ my $res = $self->$write_lease_file();
+ if ($res) {
+ $self->$logger("Updated lease file", INFO);
+ }
+ }
+ }
+
+ return $last_run;
+};
+