Skip to content

Commit ea674a3

Browse files
Treehugger RobotGerrit Code Review
authored andcommitted
Merge "Revert "base: add support for tagged fd closure to unique_fd.""
2 parents 65e4751 + 30dd7d4 commit ea674a3

File tree

3 files changed

+14
-123
lines changed

3 files changed

+14
-123
lines changed

base/Android.bp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ cc_test {
135135
"strings_test.cpp",
136136
"test_main.cpp",
137137
"test_utils_test.cpp",
138-
"unique_fd_test.cpp",
139138
],
140139
target: {
141140
android: {

base/include/android-base/unique_fd.h

Lines changed: 14 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -42,105 +42,51 @@
4242
//
4343
// unique_fd is also known as ScopedFd/ScopedFD/scoped_fd; mentioned here to help
4444
// you find this class if you're searching for one of those names.
45-
46-
#if defined(__BIONIC__)
47-
#include <android/fdsan.h>
48-
#endif
49-
5045
namespace android {
5146
namespace base {
5247

5348
struct DefaultCloser {
54-
#if defined(__BIONIC__)
55-
static void Tag(int fd, void* old_addr, void* new_addr) {
56-
uint64_t old_tag = android_fdsan_create_owner_tag(ANDROID_FDSAN_OWNER_TYPE_UNIQUE_FD,
57-
reinterpret_cast<uint64_t>(old_addr));
58-
uint64_t new_tag = android_fdsan_create_owner_tag(ANDROID_FDSAN_OWNER_TYPE_UNIQUE_FD,
59-
reinterpret_cast<uint64_t>(new_addr));
60-
android_fdsan_exchange_owner_tag(fd, old_tag, new_tag);
61-
}
62-
static void Close(int fd, void* addr) {
63-
uint64_t tag = android_fdsan_create_owner_tag(ANDROID_FDSAN_OWNER_TYPE_UNIQUE_FD,
64-
reinterpret_cast<uint64_t>(addr));
65-
android_fdsan_close_with_tag(fd, tag);
66-
}
67-
#else
6849
static void Close(int fd) {
6950
// Even if close(2) fails with EINTR, the fd will have been closed.
7051
// Using TEMP_FAILURE_RETRY will either lead to EBADF or closing someone
7152
// else's fd.
7253
// http://lkml.indiana.edu/hypermail/linux/kernel/0509.1/0877.html
7354
::close(fd);
7455
}
75-
#endif
7656
};
7757

7858
template <typename Closer>
7959
class unique_fd_impl final {
8060
public:
81-
unique_fd_impl() {}
61+
unique_fd_impl() : value_(-1) {}
8262

83-
explicit unique_fd_impl(int fd) { reset(fd); }
63+
explicit unique_fd_impl(int value) : value_(value) {}
8464
~unique_fd_impl() { reset(); }
8565

86-
unique_fd_impl(unique_fd_impl&& other) { reset(other.release()); }
66+
unique_fd_impl(unique_fd_impl&& other) : value_(other.release()) {}
8767
unique_fd_impl& operator=(unique_fd_impl&& s) {
88-
int fd = s.fd_;
89-
s.fd_ = -1;
90-
reset(fd, &s);
68+
reset(s.release());
9169
return *this;
9270
}
9371

94-
void reset(int new_value = -1) { reset(new_value, nullptr); }
72+
void reset(int new_value = -1) {
73+
if (value_ != -1) {
74+
Closer::Close(value_);
75+
}
76+
value_ = new_value;
77+
}
9578

96-
int get() const { return fd_; }
79+
int get() const { return value_; }
9780
operator int() const { return get(); }
9881

9982
int release() __attribute__((warn_unused_result)) {
100-
tag(fd_, this, nullptr);
101-
int ret = fd_;
102-
fd_ = -1;
83+
int ret = value_;
84+
value_ = -1;
10385
return ret;
10486
}
10587

10688
private:
107-
void reset(int new_value, void* previous_tag) {
108-
if (fd_ != -1) {
109-
close(fd_, this);
110-
}
111-
112-
fd_ = new_value;
113-
if (new_value != -1) {
114-
tag(new_value, previous_tag, this);
115-
}
116-
}
117-
118-
int fd_ = -1;
119-
120-
// Template magic to use Closer::Tag if available, and do nothing if not.
121-
// If Closer::Tag exists, this implementation is preferred, because int is a better match.
122-
// If not, this implementation is SFINAEd away, and the no-op below is the only one that exists.
123-
template <typename T = Closer>
124-
static auto tag(int fd, void* old_tag, void* new_tag)
125-
-> decltype(T::Tag(fd, old_tag, new_tag), void()) {
126-
T::Tag(fd, old_tag, new_tag);
127-
}
128-
129-
template <typename T = Closer>
130-
static void tag(long, void*, void*) {
131-
// No-op.
132-
}
133-
134-
// Same as above, to select between Closer::Close(int) and Closer::Close(int, void*).
135-
template <typename T = Closer>
136-
static auto close(int fd, void* tag_value) -> decltype(T::Close(fd, tag_value), void()) {
137-
T::Close(fd, tag_value);
138-
}
139-
140-
template <typename T = Closer>
141-
static auto close(int fd, void*) -> decltype(T::Close(fd), void()) {
142-
T::Close(fd);
143-
}
89+
int value_;
14490

14591
unique_fd_impl(const unique_fd_impl&);
14692
void operator=(const unique_fd_impl&);

base/unique_fd_test.cpp

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)