Techniques for detecting potential
concurrency issues and / or
causality bugs are disclosed. To this end, the
system maintains at least one
object graph of event objects. The event objects represent events, and the event objects in an
object graph are interconnected by references that represent causal and / or temporal relationships between the corresponding events. Before a thread attempts a task that could feasibly conflict with another task, the
system may compel the thread to consult the
object graph. For instance, if a task entails accessing a
shared object, the
system may compel a thread to determine if the last event to mutate the
shared object is represented in an object graph of event objects before an event corresponding to the thread's current attempt to complete this task. If the last
mutation event is absent from the object graph, the system may prevent or
delay the thread from completing the task.