Aha, thanks; I didn't realize the first generational section was for an older version.
However, the riptide barrier description still isn't 100% clear how it avoids terminating a sweep (I believe "drain" in your termination) in the middle of a barrier execution; in particular I'm not concerned about the data race between the field write and the mark bit, but the GC reading mark bits, believing the drain has terminated, and freeing memory while a mutator thread has written a field but not written the mark bit.
Are you just relying on the stop-the-world behavior relative to roots that you mention briefly?