// Copyright 2016 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.

#pragma once

#ifndef __Fuchsia__
#error "Fuchsia-only header"
#endif

#include <fbl/intrusive_double_list.h>
#include <fbl/unique_ptr.h>
#include <fs/connection.h>
#include <fs/vfs.h>

namespace fs {

// A specialization of |Vfs| which tears down all active connections when it
// is destroyed.
//
// Unlinke |Vfs|, this class is NOT thread-safe and it must be used with a
// single-threaded asynchronous dispatcher.
class ManagedVfs : public Vfs {
public:
    ManagedVfs(async_t* async);
    ~ManagedVfs() override;

protected:
    void RegisterConnection(fbl::unique_ptr<Connection> connection) final;
    void UnregisterAndDestroyConnection(Connection* connection) final;

private:
    fbl::DoublyLinkedList<fbl::unique_ptr<Connection>> connections_;
};

} // namespace fs
