From 797fe27efe255fee2f8a8ea8c1c6216908f53640 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 14 Jan 2015 15:43:28 -0800 Subject: [PATCH] struct return type version --- src/allreduce_base.cc | 5 +++-- src/allreduce_base.h | 16 +++++++++++++++- src/allreduce_robust.cc | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/allreduce_base.cc b/src/allreduce_base.cc index 4f43eb97b..590041f8d 100644 --- a/src/allreduce_base.cc +++ b/src/allreduce_base.cc @@ -561,8 +561,9 @@ AllreduceBase::TryBroadcast(void *sendrecvbuf_, size_t total_size, int root) { } else { // read from in link if (in_link >= 0 && selecter.CheckRead(links[in_link].sock)) { - if (!links[in_link].ReadToArray(sendrecvbuf_, total_size)) { - return kSockError; + ReturnType ret = links[in_link].ReadToArray(sendrecvbuf_, total_size); + if (ret != kSuccess) { + return ReportError(&links[in_link], ret); } size_in = links[in_link].size_read; } diff --git a/src/allreduce_base.h b/src/allreduce_base.h index 003671ab4..78e69bd99 100644 --- a/src/allreduce_base.h +++ b/src/allreduce_base.h @@ -198,7 +198,7 @@ class AllreduceBase : public IEngine { protected: /*! \brief enumeration of possible returning results from Try functions */ - enum ReturnType { + enum ReturnTypeEnum { /*! \brief execution is successful */ kSuccess, /*! \brief a link was reset by peer */ @@ -213,6 +213,20 @@ class AllreduceBase : public IEngine { */ kGetExcept }; + /*! \brief struct return type to avoid implicit conversion to int/bool */ + struct ReturnType { + /*! \brief internal return type */ + ReturnTypeEnum value; + // constructor + ReturnType() {} + ReturnType(ReturnTypeEnum value) : value(value){} + inline bool operator==(const ReturnTypeEnum &v) const { + return value == v; + } + inline bool operator!=(const ReturnTypeEnum &v) const { + return value != v; + } + }; /*! \brief translate errno to return type */ inline static ReturnType Errno2Return(int errsv) { if (errsv == EAGAIN || errsv == EWOULDBLOCK) return kSuccess; diff --git a/src/allreduce_robust.cc b/src/allreduce_robust.cc index 25c221f18..341ea558f 100644 --- a/src/allreduce_robust.cc +++ b/src/allreduce_robust.cc @@ -432,7 +432,7 @@ bool AllreduceRobust::CheckAndRecover(ReturnType err_type) { // this was old way // TryResetLinks still causes possible errors, so not use this one while (err_type != kSuccess) { - switch (err_type) { + switch (err_type.value) { case kGetExcept: err_type = TryResetLinks(); break; case kSockError: { TryResetLinks();