Build #3,038

Build: #3038 was successful Changes by Simon Baslé <sbasle@vmware.com>

Build result summary

Details

Completed
Duration
14 minutes
Labels
None
Agent
bamboo-15.af.pivotal.io
Revision
2d9b1ee9ccadcef3cd8b685f324ba0ac68aeefc8 2d9b1ee9ccadcef3cd8b685f324ba0ac68aeefc8
Total tests
7847
Successful since
#3027 ()

Tests

Code commits

Author Commit Message Commit date
Simon Baslé <sbasle@vmware.com> Simon Baslé <sbasle@vmware.com> 2d9b1ee9ccadcef3cd8b685f324ba0ac68aeefc8 2d9b1ee9ccadcef3cd8b685f324ba0ac68aeefc8 Merge #2628 into 3.4.4 and add jcstress test
Simon Baslé <sbasle@vmware.com> Simon Baslé <sbasle@vmware.com> 6da5d22800602b3c7ec0aa6a36525fa406b66993 m 6da5d22800602b3c7ec0aa6a36525fa406b66993 Fix flatMap race favoring onComplete over onError (#2628)
This issue also affects the `merge` operator, since it relies on flatMap
internal classes. It would manifest in flatMap and merge seemingly
dropping errors and completing successfully.

The race is in the `innerError` method, which marks the inner as `done`
_before_ it updates the ERROR field with the inner error (or adds it to
the composite in case of delayErrors). This can cause a parrallel inner
onComplete signal to only observe the `inner.done` state without seeing
any `Throwable` in the ERROR field, which it interprets as a trigger
for downstream onComplete.

By ensuring the inner onError path only sets the `inner.done` to true
once the ERROR has been updated, we can avoid this race condition.

Fixes #2618.
Fixes #1941.