diff options
author | bustico | 2009-10-07 09:13:17 +0000 |
---|---|---|
committer | bustico | 2009-10-07 09:13:17 +0000 |
commit | 9151aab5dca0f49d389a7fa6063276f25a2bdb62 (patch) | |
tree | 948a88cd1f7b91cc40f13d73c698b9368f30e4b1 | |
parent | b933d69a4f3b6643f12fcbf2fcc92d532bcaa8a7 (diff) | |
download | ivy-perl-9151aab5dca0f49d389a7fa6063276f25a2bdb62.zip ivy-perl-9151aab5dca0f49d389a7fa6063276f25a2bdb62.tar.gz ivy-perl-9151aab5dca0f49d389a7fa6063276f25a2bdb62.tar.bz2 ivy-perl-9151aab5dca0f49d389a7fa6063276f25a2bdb62.tar.xz |
Fix the condition to send "message ready" :
before fix, whe sended "message ready" after sending "end regexp",
but this message ready could be ignored by peer agent if himself
has not yet bound this message.
fix consist to wait to two conditions :
have received peer "end regexp" AND having sent "end regexp".
Fix is the same as the one just applied to ivy-c.
-rw-r--r-- | Ivy.pm | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -1,7 +1,7 @@ # # Ivy, Perl interface # -# Copyright 1997-2008 +# Copyright 1997-2009 # Centre d'Études de la Navigation Aérienne # # Authors: Alexandre Bustico <alexandre.bustico@cena.fr> @@ -361,6 +361,7 @@ use constant appName => $constantIndexer++; use constant messWhenReady => $constantIndexer++; use constant uuid => $constantIndexer++; use constant pongQueue => $constantIndexer++; +use constant readyToSend => $constantIndexer++; ############################################################################# #### METHODES PUBLIQUES ##### @@ -683,6 +684,7 @@ sub new ($%) ($self->[useMulticast], $self->[broadcastPort], $self->[broadcastBuses]) = _parseIvyBusParam ($options{-ivyBus}); + $self->[readyToSend] = 0; return ($self); @@ -1646,8 +1648,11 @@ sub _getMessages ($$) elsif ($type == ENDREGEXP) { # E N D R E G E X P # on envoie le message ready uniquement a celui qui nous - # a envoye le message endregexp - $self->_sendMsgTo ($appSock, \$self->[messWhenReady]); + # a envoye le message endregexp, et uniquement si on a + # à la fois envoyé le end regexp, et reçu le endregexp de l'autre + if (++$self->[readyToSend] == 2) { + $self->_sendMsgTo ($appSock, \$self->[messWhenReady]); + } # on passe de l'etat Connecte a l'etat Ready $self->[cnnxion]{"$addr:$peerPort"} =~ s/^\004//g; @@ -1762,6 +1767,13 @@ sub _sendWantedRegexp ($$) } # on envoie le message de fin d'envoi de regexps _univSend ($self, $appSock, sprintf (MSG_FMT, ENDREGEXP, 0, "")); + + # on envoie le message ready uniquement a celui qui nous + # a envoye le message endregexp, et uniquement si on a + # à la fois envoyé le end regexp, et reçu le endregexp de l'autre + if (++$self->[readyToSend] == 2) { + $self->_sendMsgTo ($appSock, \$self->[messWhenReady]); + } } # end _sendWantedRegexp ############### METHODE SEND LAST REGEXP TO ALLREADY CONNECTED |