summaryrefslogtreecommitdiff
path: root/absl/status/status.cc
diff options
context:
space:
mode:
authorGravatar Xiaoyi Zhang <zhangxy988@gmail.com>2020-03-04 15:57:37 -0500
committerGravatar GitHub <noreply@github.com>2020-03-04 15:57:37 -0500
commitdf3ea785d8c30a9503321a3d35ee7d35808f190d (patch)
tree28050d1d97bb556d62c355ed08e7301c954fbab8 /absl/status/status.cc
parentb832dce8489ef7b6231384909fd9b68d5a5ff2b7 (diff)
Patch LTS with the bug fix for `absl::Status::ErasePayload`. (#632)20200225.1
f8fe7bd53bfed601f002f521e34ab4bc083fc28b by Matthew Brown <matthewbr@google.com>: Ensure a deep copy and proper equality on absl::Status::ErasePayload PiperOrigin-RevId: 298482742
Diffstat (limited to 'absl/status/status.cc')
-rw-r--r--absl/status/status.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/absl/status/status.cc b/absl/status/status.cc
index bbc1895e..df3b740f 100644
--- a/absl/status/status.cc
+++ b/absl/status/status.cc
@@ -147,7 +147,15 @@ void Status::SetPayload(absl::string_view type_url, absl::Cord payload) {
bool Status::ErasePayload(absl::string_view type_url) {
int index = status_internal::FindPayloadIndexByUrl(GetPayloads(), type_url);
if (index != -1) {
+ PrepareToModify();
GetPayloads()->erase(GetPayloads()->begin() + index);
+ if (GetPayloads()->empty() && message().empty()) {
+ // Special case: If this can be represented inlined, it MUST be
+ // inlined (EqualsSlow depends on this behavior).
+ StatusCode c = static_cast<StatusCode>(raw_code());
+ Unref(rep_);
+ rep_ = CodeToInlinedRep(c);
+ }
return true;
}