Commit d2bfb9a5 authored by Scott Vokes's avatar Scott Vokes
Browse files

Ensure that per-session sequence ID increments are atomic.

parent c69b1eeb
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -145,9 +145,18 @@ KineticStatus KineticSession_Disconnect(KineticSession const * const session)
    return KINETIC_STATUS_SUCCESS;
}

#define CAS(PTR, OLD, NEW) (__sync_bool_compare_and_swap(PTR, OLD, NEW))

void KineticSession_IncrementSequence(KineticSession const * const session)
{
    assert(session != NULL);
    assert(session->connection != NULL);
    session->connection->sequence++;

    for (;;) {
        int64_t cur_seq_id = session->connection->sequence;
        if (CAS(&session->connection->sequence,
                cur_seq_id, cur_seq_id + 1)) {
            break;
        }
    }
}