Hello,

Time from time the following exception occurs:
2019-03-01 20:22:56.99 : raised SYSTEM.ASSERTIONS.ASSERT_FAILURE : Position 
cursor of Next is bad
[bin/adablog]
System.Assertions.Raise_Assert_Failure at s-assert.adb:46
Gnoga.Server.Connection.Socket_Maps.NextXnn at a-coorma.adb:1075
Gnoga.Server.Connection.Connection_Manager.NextN at 
gnoga-server-connection.adb:1085
Gnoga.Server.Connection.Connection_Manager.NextP at 
gnoga-server-connection.adb:1082
Gnoga.Server.Connection.Watchdog_TypeT at gnoga-server-connection.adb:1268

Watchdog piece of code:
            Connection_Manager.First (ID);
            while ID /= 0 loop
               Ping (ID);
               Connection_Manager.Next (ID);   --> exception raised
            end loop;

I guess it fails when Current_Socket has been previous deleted:
      procedure Next (ID : out Gnoga.Types.Connection_ID) is
         use type Socket_Maps.Cursor;
      begin
         Current_Socket := Socket_Maps.Next (Current_Socket); --> exception 
raised
         if Current_Socket /= Socket_Maps.No_Element then
            ID := Socket_Maps.Key (Current_Socket);
         else
            ID := 0;
         end if;
      end Next;

This issue has been discussed last year from Gautier ping issue:
https://sourceforge.net/p/gnoga/mailman/gnoga-list/thread/2b62e268-6f8a-8bec-c249-4e90753fab1e%40adalog.fr/#msg36384899

And Jere had opened a ticket and a discussion about a similar issue with the ID 
closing loop:
https://sourceforge.net/p/gnoga/tickets/41/
https://sourceforge.net/p/gnoga/mailman/message/36357020/

Let's sum up ideas:
a) include the watchdog loop into the protected object Connection_Manager, as 
Jeff proposed for Jere issue,
What could possible side effects for watchdog case?
b) declare a shadow socket container in the protected object Connection_Manager 
and clone active socket container into the shadow one when calling First and 
then iterating on the shadow container which will be safe, as Jeff proposed too,
c) Add to the ID loop an exception handler which rewind the cursor to first, as 
Jere proposed,
What could possible side effects for watchdog case?
d) do nothing ;-)

In my opinion, b) is a safer choice, c) is simple choice.
What is your feedback?

Thanks, Pascal.
http://blady.pagesperso-orange.fr




_______________________________________________
Gnoga-list mailing list
Gnoga-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gnoga-list

Reply via email to