I have a test in Jaybird that post multiple events 
(https://github.com/FirebirdSQL/jaybird/blob/master/src/test/org/firebirdsql/event/TestFBEventManager.java#L173)

Essentially it inserts on multiple threads (100 inserts per thread, 5 
threads, a commit after each insert) which causes a trigger to post

POST_EVENT 'TEST_EVENT_A'
POST_EVENT 'TEST_EVENT_B'
POST_EVENT 'TEST_EVENT_A'

(yes, it is posting TEST_EVENT_A twice)

Which should lead to posting TEST_EVENT_A 1000 times and TEST_EVENT_B 
500 times. This test occasionally fails (about 1 in 3 runs on Firebird 
3). I initially thought I wasn't waiting long enough for all events to 
be received.

After adding some extra debug logging, it looks like Firebird is 
occasionally losing event registrations (not posting them, but the event 
is unregistered), or posting an event with the id of TEST_EVENT_A, but 
posting the count of TEST_EVENT_B (or vice versa), but both events are 
unregistered, which seems to indicate some sort of race condition or 
interleaved writes of the event.

I can reproduce this problem both with Jaybird 2.2 and Jaybird 3, which 
have a totally different implementations.

As far as I can tell it is not version specific, but it is more easily 
reproducible on Firebird 3 and 4 (probably because I'm using SuperServer).

Could someone take a look at this?

Mark
-- 
Mark Rotteveel

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to