From: Steffan Karger <steffan.kar...@fox-it.com>

Adding polar_ok() was a good plan for improving error reporting, but also
added two function calls (one to polar_log_func_line() and one to
polar_log_err()) for each function call wrapped with polar_ok().
Especially in the critical path, this is a waste of time.

To avoid this overhead, add a simple static inline wrapper to reduce it to
a single branch.

v2 - use a static inline wrapper to prevent evaluating 'errval' twice in
     the macro.

Signed-off-by: Steffan Karger <steffan.kar...@fox-it.com>
---
 src/openvpn/crypto_polarssl.h | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/openvpn/crypto_polarssl.h b/src/openvpn/crypto_polarssl.h
index bd0f8b8..94306ed 100644
--- a/src/openvpn/crypto_polarssl.h
+++ b/src/openvpn/crypto_polarssl.h
@@ -115,6 +115,15 @@ bool polar_log_err(unsigned int flags, int errval, const 
char *prefix);
 bool polar_log_func_line(unsigned int flags, int errval, const char *func,
     int line);

+/** Wraps polar_log_func_line() to prevent function calls for non-errors */
+static inline bool polar_log_func_line_lite(unsigned int flags, int errval,
+    const char *func, int line) {
+  if (errval) {
+    return polar_log_func_line (flags, errval, func, line);
+  }
+  return true;
+}
+
 /**
  * Check errval and log on error.
  *
@@ -128,7 +137,7 @@ bool polar_log_func_line(unsigned int flags, int errval, 
const char *func,
  * @returns true if no errors are detected, false otherwise.
  */
 #define polar_ok(errval) \
-  polar_log_func_line(D_CRYPT_ERRORS, errval, __func__, __LINE__)
+  polar_log_func_line_lite(D_CRYPT_ERRORS, errval, __func__, __LINE__)


 #endif /* CRYPTO_POLARSSL_H_ */
-- 
2.5.0


Reply via email to