From dbd739a4ae41e487eb9bf345c1ac8ff128123956 Mon Sep 17 00:00:00 2001 From: damiano Date: Thu, 9 Mar 2000 15:40:57 +0000 Subject: Mauvais copier coller : boucle infinie --- Ivy.pm | 110 ++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 55 insertions(+), 55 deletions(-) (limited to 'Ivy.pm') diff --git a/Ivy.pm b/Ivy.pm index deede7c..9ca3875 100644 --- a/Ivy.pm +++ b/Ivy.pm @@ -25,7 +25,7 @@ use Time::Gettimeofday ; use vars qw($VERSION); -$VERSION = '4.2'; +$VERSION = '4.3'; ############################################################################# #### PROTOTYPES ##### @@ -1051,10 +1051,10 @@ sub _getMessages ($$) # les facons dont un couple d'applis connectee peuevent sortir et # eviter les dead lock qui doivent subsister. if (defined ($localLoopSel)) { - $self->_removeFileDescriptor ($self, $appSock); + $self->_removeFileDescriptor ($appSock); } else { - $self->_removeFileDescriptor ($self, $appSock); + $self->_removeFileDescriptor ($appSock); } return; } @@ -1291,61 +1291,61 @@ sub _inetAdrByName ($$) { ############### PROCEDURE REMOVE FILE DESCRIPTOR sub _removeFileDescriptor ($$) { - my ($self, $fd) = @_; - - my $diedAppName; - - # on s'est deja occupe de lui - return unless exists $self->[sockList]->{$fd}; - # printf ("DBG> _removeFileDescriptor IN thread %s\n", ${Thread->self}); - - # on efface les structures de donnees associees au fd - # on vire ce fd des fd a scruter dans la bcle d'evenements - # uniquement si on est dans le thread principal - # sinon le select merde salement sur ce coup - &$fileEventFunc ($fd, '') ; - delete $self->[sendRegList]{$fd}; - delete $self->[sockList]{$fd}; - delete $self->[buffByConn]->{$fd}; - - $fd->close(); - - EXT_LOOP: - foreach my $name (keys %{$self->[appliList]}) { - foreach my $fdp (@{$self->[appliList]{$name}}) { - if ($fd eq $fdp) { - $diedAppName = $name; - @{$self->[appliList]{$name}} = - grep ($_ ne $fdp, @{$self->[appliList]{$name}}); - if (scalar (@{$self->[appliList]{$name}}) == 0) { - delete $self->[appliList]->{$name} - } - last EXT_LOOP; + my ($self, $fd) = @_; + + my $diedAppName; + + # on s'est deja occupe de lui + return unless exists $self->[sockList]->{$fd}; + # printf ("DBG> _removeFileDescriptor IN thread %s\n", ${Thread->self}); + + # on efface les structures de donnees associees au fd + # on vire ce fd des fd a scruter dans la bcle d'evenements + # uniquement si on est dans le thread principal + # sinon le select merde salement sur ce coup + &$fileEventFunc ($fd, '') ; + delete $self->[sendRegList]{$fd}; + delete $self->[sockList]{$fd}; + delete $self->[buffByConn]->{$fd}; + + $fd->close(); + + EXT_LOOP: + foreach my $name (keys %{$self->[appliList]}) { + foreach my $fdp (@{$self->[appliList]{$name}}) { + if ($fd eq $fdp) { + $diedAppName = $name; + @{$self->[appliList]{$name}} = + grep ($_ ne $fdp, @{$self->[appliList]{$name}}); + if (scalar (@{$self->[appliList]{$name}}) == 0) { + delete $self->[appliList]->{$name} } + last EXT_LOOP; } } - - unless (defined $diedAppName) { - warn "Ivy::__removeFileDescriptor : deconnection de NONAME\n" if $^W; - return; - } - - my $addrInet = (grep ($self->[cnnxion]{$_} eq $diedAppName, - keys %{$self->[cnnxion]}))[0]; - - unless (defined $addrInet) { - die "ERREUR _removeFileDescriptor deconnection de $diedAppName ". - "addrInet not defined\n"; - return; - } - - #printf "DBG> _removeFileDescriptor : deconnection de %s ($diedAppName)\n", _inetAdrByName ($diedAppName); - - delete $self->[cnnxion]{$addrInet}; - - # on vire l'entree correspondant a ce canal dans la liste des - # regexps par canal - $self->_scanConnStatus () ; + } + + unless (defined $diedAppName) { + warn "Ivy::__removeFileDescriptor : deconnection de NONAME\n" if $^W; + return; + } + + my $addrInet = (grep ($self->[cnnxion]{$_} eq $diedAppName, + keys %{$self->[cnnxion]}))[0]; + + unless (defined $addrInet) { + die "ERREUR _removeFileDescriptor deconnection de $diedAppName ". + "addrInet not defined\n"; + return; + } + + #printf "DBG> _removeFileDescriptor : deconnection de %s ($diedAppName)\n", _inetAdrByName ($diedAppName); + + delete $self->[cnnxion]{$addrInet}; + + # on vire l'entree correspondant a ce canal dans la liste des + # regexps par canal + $self->_scanConnStatus () ; } -- cgit v1.1