226db18054
Seconde revue adverse, sur le correctif precedent - et elle a raison : celui-ci MASQUAIT la barriere perimee au lieu de l'oublier. `reportSetupFailure` effacait `establishing` et laissait `lastState`. Le premier correctif avait ajoute « et un canal tient » du cote du LECTEUR, ce qui ne cachait la barriere morte que tant que rien ne tenait. La souscription suivante sur le meme fan-out remettait `establishing` a vrai, le masque tombait - et le fan-out rejouait ce `State` au nouvel arrivant. Mesure : l'ouverture bootstrap franchissait sa barriere en 2 ms sur un `State` d'un appel qui avait ECHOUE, journalisait `BARRIER ... synced`, et `getSyncState` repondait `"synced"` - donc autorite, donc `noRowsMeansAbsent` prenait une lecture a zero ligne pour une absence definitive. Le depot detruit que le commit precedent pretendait empecher. Corrige a la source : une tentative qui echoue oublie sa barriere, comme le font deja `releaseFanOut` et `resubscribeDocs`. Le garde du lecteur est RETIRE avec, et pas garde en ceinture-bretelles : il etait devenu inatteignable, et c'est lui qui avait cache la faute. Apres : la barriere est oubliee, l'ouverture attend la sienne (202 ms), `"timed-out"`. Et le test que j'avais ecrit affirmait le defaut - `barrierCrossed` vrai - au lieu de l'etat correct. Corrige, plus un second test qui conduit le rejeu de bout en bout.