blob: f6c55e95b885a0c0643b701909200096c22169ce [file] [log] [blame] [edit]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBHWSEC_STRUCTURES_THREADING_MODE_H_
#define LIBHWSEC_STRUCTURES_THREADING_MODE_H_
namespace hwsec {
// Most of the factory implementations will support two kinds of threading
// modes.
//
// A simple rule to choose between these two modes:
// If it's single thread environment, use kCurrentThread.
// Otherwise, use kStandaloneWorkerThread.
enum class ThreadingMode {
// This mode will create an extra thread for the underlying middleware and
// backend, and the frontend interface will be thread safe.
// This mode can be used in any case, the only downside of it is the
// performance.
kStandaloneWorkerThread,
// The middleware & backend will run on the thread that created the
// factory.
// If current thread don't have task runner, the asynchronous will check
// fail. This mode should only be used when the creation, destruction and
// usage of the libhwsec is all on the same thread, otherwise it may result
// race conditions or deadlocks.
kCurrentThread,
};
} // namespace hwsec
#endif // LIBHWSEC_STRUCTURES_THREADING_MODE_H_