kpayson64 7 жил өмнө
parent
commit
96c0a266a0

+ 1 - 1
src/core/ext/filters/http/client/http_client_filter.cc

@@ -167,7 +167,7 @@ static void recv_trailing_metadata_ready(void* user_data, grpc_error* error) {
   if (calld->recv_initial_metadata_error != GRPC_ERROR_NONE) {
     if (error == GRPC_ERROR_NONE) {
       error = GRPC_ERROR_REF(calld->recv_initial_metadata_error);
-    } else {
+    } else if (error != calld->recv_initial_metadata_error) {
       error = grpc_error_add_child(error, calld->recv_initial_metadata_error);
     }
   }

+ 5 - 4
src/core/ext/filters/http/server/http_server_filter.cc

@@ -324,14 +324,15 @@ static void hs_recv_trailing_metadata_ready(void* user_data, grpc_error* err) {
   if (calld->recv_initial_metadata_ready_error != GRPC_ERROR_NONE) {
     if (err == GRPC_ERROR_NONE) {
       err = GRPC_ERROR_REF(calld->recv_initial_metadata_ready_error);
-    } else {
+    } else if (err != calld->recv_initial_metadata_ready_error) {
       err = grpc_error_add_child(err, calld->recv_initial_metadata_ready_error);
+    } else {
+      err = GRPC_ERROR_REF(err);
     }
-    GRPC_CLOSURE_RUN(calld->original_recv_trailing_metadata_ready, err);
   } else {
-    GRPC_CLOSURE_RUN(calld->original_recv_trailing_metadata_ready,
-                     GRPC_ERROR_REF(err));
+    err = GRPC_ERROR_REF(err);
   }
+  GRPC_CLOSURE_RUN(calld->original_recv_trailing_metadata_ready, err);
 }
 
 static grpc_error* hs_mutate_op(grpc_call_element* elem,

+ 3 - 2
src/core/ext/filters/message_size/message_size_filter.cc

@@ -140,7 +140,6 @@ static void recv_message_ready(void* user_data, grpc_error* error) {
       error = new_error;
     } else {
       error = grpc_error_add_child(error, new_error);
-      GRPC_ERROR_UNREF(new_error);
     }
     calld->error = GRPC_ERROR_REF(error);
     gpr_free(message_string);
@@ -159,8 +158,10 @@ static void recv_trailing_metadata_ready(void* user_data, grpc_error* error) {
   if (calld->error != GRPC_ERROR_NONE) {
     if (error == GRPC_ERROR_NONE) {
       error = GRPC_ERROR_REF(calld->error);
+    } else if (error != calld->error) {
+      error = grpc_error_add_child(error, GRPC_ERROR_REF(calld->error));
     } else {
-      error = grpc_error_add_child(error, calld->error);
+      error = GRPC_ERROR_REF(error);
     }
   } else {
     error = GRPC_ERROR_REF(error);