After the code block I quoted, there is this line:

        event->rvnt_id = stuff->p_event_rid;

Which makes a already reused event to be reassigned another id.

Later, engine calls the callback and remote respond both events with the
same id.


Adriano


Em 09/04/2017 16:33, Adriano dos Santos Fernandes escreveu:
> Vlad,
> 
> I think have found the problem in server.
> 
> Look at this:
> 
> --------
> ISC_STATUS rem_port::que_events(P_EVENT * stuff, PACKET* sendL)
> {
> ...
> 
>       Rvnt* event;
>       for (event = rdb->rdb_events; event; event = event->rvnt_next)
>       {
>               if (!event->rvnt_iface)
>               {
>                       event->rvnt_destroyed = 0;
>                       break;
>               }
>       }
> 
>       if (!event)
>       {
>               event = FB_NEW Rvnt;
> #ifdef DEBUG_REMOTE_MEMORY
>               printf("que_events(server)        allocate event   %x\n", 
> event);
> #endif
>               event->rvnt_next = rdb->rdb_events;
>               rdb->rdb_events = event;
>               event->rvnt_callback = FB_NEW Callback(rdb, event);
>       }
> --------
> 
> This code runs concurrently and find the same empty slot for
> simultaneous events being registered.
> 
> 
> Adriano
> 
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> Firebird-Devel mailing list, web interface at 
> https://lists.sourceforge.net/lists/listinfo/firebird-devel
> 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to