From a2e1e877cf2c2bacae398041eff15387adfaf995 Mon Sep 17 00:00:00 2001 From: Mark Buechler Date: Fri, 24 Sep 2010 15:15:57 +0000 Subject: [PATCH] - Better fix for removing virtual targets. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@2239 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- .../scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm b/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm index 16eec92da..d573a1319 100644 --- a/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm +++ b/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm @@ -1023,21 +1023,28 @@ sub removeVirtualTarget { my $sessions = $self->sessions($driver, $target); - my $can_close; + my %can_close; foreach my $session (keys %{$sessions}) { if (defined($$sessions{$session}->{'force_close'})) { - $can_close = TRUE; + $can_close{$session}++; my $rc = closeSession($driver, $target, $session); return $rc if ($rc); } } - if ($can_close) { + if (scalar keys %can_close) { my $has_sessions = 1; my $now = time(); while ($has_sessions && (($now + $TIMEOUT) > time())) { $sessions = $self->sessions($driver, $target); - $has_sessions = scalar keys %{$sessions}; + + foreach my $session (keys %can_close) { + if (!defined($$sessions{$session})) { + delete $can_close{$session}; + } + } + + $has_sessions = scalar keys %can_close; sleep 1 if ($has_sessions); }