Skip to content

AtomicBorrow race condition #53

@zakarumych

Description

@zakarumych

In src/borrow.rs functions AtomicBorrow::borrow and AtomicBorrow::release_mut conflict with each other.

This execution order will break internal state

Atomic value is 0 originally.
Thread #1 AtomicBorrow::borrow_mut() stores UNIQUE_BIT in atomic value.
Thread #2 AtomicBorrow::borrow() increments atomic value. Sees UNIQUE_BIT set
Thread #1 AtomicBorrow::release_mut() stores 0 in atomic value.
Thread #2 AtomicBorrow::borrow() decrements atomic value.
Atomic value is usize::MAX.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions