Coverage Report

Created: 2023-09-30 09:22

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Host/posix/PipePosix.h
Line
Count
Source (jump to first uncovered line)
1
//===-- PipePosix.h ---------------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_HOST_POSIX_PIPEPOSIX_H
10
#define LLDB_HOST_POSIX_PIPEPOSIX_H
11
#include "lldb/Host/PipeBase.h"
12
#include <mutex>
13
14
namespace lldb_private {
15
16
/// \class PipePosix PipePosix.h "lldb/Host/posix/PipePosix.h"
17
/// A posix-based implementation of Pipe, a class that abtracts
18
///        unix style pipes.
19
///
20
/// A class that abstracts the LLDB core from host pipe functionality.
21
class PipePosix : public PipeBase {
22
public:
23
  static int kInvalidDescriptor;
24
25
  PipePosix();
26
  PipePosix(lldb::pipe_t read, lldb::pipe_t write);
27
  PipePosix(const PipePosix &) = delete;
28
  PipePosix(PipePosix &&pipe_posix);
29
  PipePosix &operator=(const PipePosix &) = delete;
30
  PipePosix &operator=(PipePosix &&pipe_posix);
31
32
  ~PipePosix() override;
33
34
  Status CreateNew(bool child_process_inherit) override;
35
  Status CreateNew(llvm::StringRef name, bool child_process_inherit) override;
36
  Status CreateWithUniqueName(llvm::StringRef prefix,
37
                              bool child_process_inherit,
38
                              llvm::SmallVectorImpl<char> &name) override;
39
  Status OpenAsReader(llvm::StringRef name,
40
                      bool child_process_inherit) override;
41
  Status
42
  OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit,
43
                          const std::chrono::microseconds &timeout) override;
44
45
  bool CanRead() const override;
46
  bool CanWrite() const override;
47
48
0
  lldb::pipe_t GetReadPipe() const override {
49
0
    return lldb::pipe_t(GetReadFileDescriptor());
50
0
  }
51
0
  lldb::pipe_t GetWritePipe() const override {
52
0
    return lldb::pipe_t(GetWriteFileDescriptor());
53
0
  }
54
55
  int GetReadFileDescriptor() const override;
56
  int GetWriteFileDescriptor() const override;
57
  int ReleaseReadFileDescriptor() override;
58
  int ReleaseWriteFileDescriptor() override;
59
  void CloseReadFileDescriptor() override;
60
  void CloseWriteFileDescriptor() override;
61
62
  // Close both descriptors
63
  void Close() override;
64
65
  Status Delete(llvm::StringRef name) override;
66
67
  Status Write(const void *buf, size_t size, size_t &bytes_written) override;
68
  Status ReadWithTimeout(void *buf, size_t size,
69
                         const std::chrono::microseconds &timeout,
70
                         size_t &bytes_read) override;
71
72
private:
73
  bool CanReadUnlocked() const;
74
  bool CanWriteUnlocked() const;
75
76
  int GetReadFileDescriptorUnlocked() const;
77
  int GetWriteFileDescriptorUnlocked() const;
78
  int ReleaseReadFileDescriptorUnlocked();
79
  int ReleaseWriteFileDescriptorUnlocked();
80
  void CloseReadFileDescriptorUnlocked();
81
  void CloseWriteFileDescriptorUnlocked();
82
  void CloseUnlocked();
83
84
  int m_fds[2];
85
86
  /// Mutexes for m_fds;
87
  mutable std::mutex m_read_mutex;
88
  mutable std::mutex m_write_mutex;
89
};
90
91
} // namespace lldb_private
92
93
#endif // LLDB_HOST_POSIX_PIPEPOSIX_H