// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "sql/initialization.h" #include "base/no_destructor.h" #include "base/synchronization/lock.h" #include "base/trace_event/trace_event.h" #include "third_party/sqlite/sqlite3.h" namespace sql { void EnsureSqliteInitialized() { // sqlite3_initialize() uses double-checked locking and thus can have // data races. static base::NoDestructor sqlite_init_lock; base::AutoLock auto_lock(*sqlite_init_lock); static bool first_call = true; if (first_call) { TRACE_EVENT0("sql", "EnsureSqliteInitialized"); sqlite3_initialize(); first_call = false; } } } // namespace sql