/*
 * Copyright (c) 2017 - present Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

#include <mutex>

namespace reporting {

struct X {
  int w;
  X* x1;
};

class Basic {
 public:
  Basic() {}

  void test(X& xparam) { xparam.x1->w++; }

  void call1() {
    test(x); // race
  }

  int test_lock() {
    mutex_.lock();
    call1();
  }

  int test_unlock() { call1(); }

 private:
  X x;
  std::mutex mutex_;
};
} // namespace reporting
