Your solution won't break anything on a shut down. Some sockets could
receive an additional web socket close if they didn't shut down as a result
which is harmless. I'll add it to the current build. Although a more
refined fashion of tracking ideas maybe called for.

As for the switching of IDs by Gnoga, that comes from a repair to the web
socket if anything goes wrong the web page will reconnect itself.

David Botton

On Wed, Jul 11, 2018 at 9:26 PM Jeremiah Breeden <jeremiah.bree...@gmail.com>
wrote:

> I went ahead and made a ticket for this.  Locally I made a bandaid fix:
>
> Connection_Manager.First (ID);
> while ID /= 0 loop
>    begin
>       Close (ID);
>       Connection_Manager.Next (ID);
>    exception
>       when others =>
>          Connection_Manager.First(ID); -- restart if cursor is deleted
> early
>    end;
> end loop;
>
> It isn't a good long term solution probably, but I tested it with multiple
> connections up and didn't seen any glaring issues.  I"m sure it breaks
> something though.  It can potentially call Close() on the same ID twice, if
> the exception occurs a few iterations down the line.  I don't know if that
> is bad or not.  I also don't know if the same fix will work for the
> Watchdog version of this bug (the one that pings all the IDs).  Starting
> over there could be costly?
>
> On Sat, Jun 30, 2018 at 10:58 AM, Jeremiah Breeden <
> jeremiah.bree...@gmail.com> wrote:
>
>> On both of my work computers (Windows 10 and Ubuntu 16.04, FSF and GPL
>> versions of GNAT), I somewhat sporadically am unable to successfully call
>> Gnoga.Application.Multi_Connect.End_Application.  It generates an error
>> message mentioning a failure with the Next procedure and the server
>> continues to run.  In all cases I am running the same exact code (though
>> recompiled for each combination).
>>
>> I was wondering if this was something others have run into?  When I
>> looked into the procedure, I found that it called
>> Gnoga.Server.Connection.Stop and inside that was the following loop:
>>
>>          Connection_Manager.First (ID);
>>          while ID /= 0 loop
>>             Close (ID);
>>             Connection_Manager.Next (ID);
>>          end loop;
>>
>>
>> I think what might be happening is that another part of gnoga is closing
>> the connection inbetween the calls to Connection_Manager.First and
>> Connection_Manager.Next (I see that Gnoga occasionally chooses to switch
>> connection IDs for my current connection, though I don't really know why).
>> It at least looks like a data race and seems like a plausible reason why
>> End_Application stops working.
>>
>> Anyone have any thoughts on this?
>>
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Gnoga-list mailing list
> Gnoga-list@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gnoga-list
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Gnoga-list mailing list
Gnoga-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gnoga-list

Reply via email to