From f3d13bd9c187c75ec9b4dbf42f8d821fb303bc90 Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Thu, 28 Jul 2016 21:30:25 +0200 Subject: [PATCH] grpc plugin: Simplify error handling a bit. Make control flow more straight forward and handle all cleanup in one place. --- src/grpc.cc | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/grpc.cc b/src/grpc.cc index 05ab8211..ae3dab25 100644 --- a/src/grpc.cc +++ b/src/grpc.cc @@ -287,45 +287,44 @@ static grpc::Status Process(grpc::ServerContext *ctx, grpc::string("failed to query values: cannot create iterator")); } + status = grpc::Status::OK; while (uc_iterator_next(iter, &name) == 0) { value_list_t res; if (parse_identifier_vl(name, &res) != 0) { - uc_iterator_destroy(iter); - return grpc::Status(grpc::StatusCode::INTERNAL, + status = grpc::Status(grpc::StatusCode::INTERNAL, grpc::string("failed to parse identifier")); + break; } if (!ident_matches(&res, &matcher)) continue; if (uc_iterator_get_time(iter, &res.time) < 0) { - uc_iterator_destroy(iter); - return grpc::Status(grpc::StatusCode::INTERNAL, + status = grpc::Status(grpc::StatusCode::INTERNAL, grpc::string("failed to retrieve value timestamp")); + break; } if (uc_iterator_get_interval(iter, &res.interval) < 0) { - uc_iterator_destroy(iter); - return grpc::Status(grpc::StatusCode::INTERNAL, + status = grpc::Status(grpc::StatusCode::INTERNAL, grpc::string("failed to retrieve value interval")); + break; } if (uc_iterator_get_values(iter, &res.values, &res.values_len) < 0) { - uc_iterator_destroy(iter); - return grpc::Status(grpc::StatusCode::INTERNAL, + status = grpc::Status(grpc::StatusCode::INTERNAL, grpc::string("failed to retrieve values")); + break; } auto vl = reply->add_values(); status = marshal_value_list(&res, vl); free(res.values); - if (!status.ok()) { - uc_iterator_destroy(iter); - return status; - } + if (!status.ok()) + break; } uc_iterator_destroy(iter); - return grpc::Status::OK; + return status; } /* Process(): QueryValues */ class Call -- 2.11.0