// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIB_ASYNC_SEQUENCE_ID_H_
#define LIB_ASYNC_SEQUENCE_ID_H_

#include <lib/async/dispatcher.h>

__BEGIN_CDECLS

// A dispatcher-specific sequence identifier, which identifies a set of actions
// with a total ordering of execution: each subsequent action will always
// observe side-effects from previous actions, if the thread(s) performing those
// actions have the same sequence identifier.
//
// For example, a dispatcher backed by a thread pool may choose to implement
// sequences by acquiring a sequence-specific lock before running any actions
// from that sequence, ensuring mutual exclusion within each sequence.
typedef struct async_sequence_id {
  uint64_t value;
} async_sequence_id_t;

// Gets the dispatcher-specific sequence identifier of the currently executing
// task.
//
// If the dispatcher supports a notion of sequences, it should populate a number
// representing the current sequence, or return |ZX_ERR_INVALID_ARGS| if the
// calling thread is not executing a task managed by the dispatcher.
//
// Otherwise, it should return |ZX_ERR_NOT_SUPPORTED|.
//
// Returns |ZX_OK| if the sequence identifier was successfully obtained.
// Returns |ZX_ERR_INVALID_ARGS| if the dispatcher supports sequences, but the
// calling thread is not executing a task managed by the dispatcher.
// Returns |ZX_ERR_NOT_SUPPORTED| if not supported by the dispatcher.
//
// This operation is thread-safe.
zx_status_t async_get_sequence_id(async_dispatcher_t* dispatcher,
                                  async_sequence_id_t* out_sequence_id);

__END_CDECLS

#endif  // LIB_ASYNC_SEQUENCE_ID_H_
