From 9151aab5dca0f49d389a7fa6063276f25a2bdb62 Mon Sep 17 00:00:00 2001 From: bustico Date: Wed, 7 Oct 2009 09:13:17 +0000 Subject: 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. --- Ivy.pm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Ivy.pm b/Ivy.pm index 78d5cd0..a243e9c 100644 --- a/Ivy.pm +++ b/Ivy.pm @@ -1,7 +1,7 @@ # # Ivy, Perl interface # -# Copyright 1997-2008 +# Copyright 1997-2009 # Centre d'Études de la Navigation Aérienne # # Authors: Alexandre Bustico @@ -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 -- cgit v1.1