Author: ivan
Date: Fri Nov  6 09:48:03 2015
New Revision: 1712928

URL: http://svn.apache.org/viewvc?rev=1712928&view=rev
Log:
Do not perform uncessary work if logging is not enabled.

* serf_private.h
  (serf__log_enabled): New function declaration.

* logging.c
  (serf__log_enabled): Implement new function.

* auth/auth.c
  (dispatch_auth): Use serf__log_enabled() find out if LOGCOMP_AUTHN logging
   is enabled and it worth to call serf_bucket_headers_get().

Modified:
    serf/trunk/auth/auth.c
    serf/trunk/logging.c
    serf/trunk/serf_private.h

Modified: serf/trunk/auth/auth.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/auth/auth.c?rev=1712928&r1=1712927&r2=1712928&view=diff
==============================================================================
--- serf/trunk/auth/auth.c (original)
+++ serf/trunk/auth/auth.c Fri Nov  6 09:48:03 2015
@@ -232,7 +232,8 @@ static apr_status_t dispatch_auth(int co
         hdrs = serf_bucket_response_get_headers(response);
 
 #ifdef SERF_LOGGING_ENABLED
-        {
+        if (serf__log_enabled(LOGLVL_WARNING, LOGCOMP_AUTHN,
+                              request->conn->config)) {
             const char *auth_hdr;
 
             /* ### headers_get() doesn't tell us whether to free this result

Modified: serf/trunk/logging.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/logging.c?rev=1712928&r1=1712927&r2=1712928&view=diff
==============================================================================
--- serf/trunk/logging.c (original)
+++ serf/trunk/logging.c Fri Nov  6 09:48:03 2015
@@ -167,6 +167,36 @@ void serf__log(apr_uint32_t level, apr_u
     }
 }
 
+int serf__log_enabled(apr_uint32_t level, apr_uint32_t comp, serf_config_t 
*config)
+{
+    log_baton_t *log_baton;
+    apr_status_t status;
+
+    if (!config) {
+        /* If we can't get the log baton then logging is disabled for provided
+           level/component combination. */
+        return FALSE;
+    }
+
+    status = serf_config_get_object(config, SERF_CONFIG_CTX_LOGBATON,
+                                    (void **)&log_baton);
+    if (!status && log_baton) {
+        int i;
+
+        for (i = 0; i < log_baton->output_list->nelts; i++) {
+            serf_log_output_t *output = APR_ARRAY_IDX(log_baton->output_list,
+                                                      i, serf_log_output_t *);
+            if ((output->level >= level) && (comp & output->comps)) {
+                /* At least one log output wants to handle this level/component
+                   combination.*/
+                return TRUE;
+            }
+        }
+    }
+
+    return FALSE;
+}
+
 /*** Output to system stream (stderr or stdout) or a file ***/
 
 static apr_status_t log_to_stream_output(serf_log_output_t *output,
@@ -287,4 +317,9 @@ apr_status_t serf_logging_add_output(ser
     return APR_SUCCESS;
 }
 
+int serf__log_enabled(apr_uint32_t level, apr_uint32_t comp, serf_config_t 
*config)
+{
+    return FALSE;
+}
+
 #endif

Modified: serf/trunk/serf_private.h
URL: 
http://svn.apache.org/viewvc/serf/trunk/serf_private.h?rev=1712928&r1=1712927&r2=1712928&view=diff
==============================================================================
--- serf/trunk/serf_private.h (original)
+++ serf/trunk/serf_private.h Fri Nov  6 09:48:03 2015
@@ -630,4 +630,10 @@ void serf__log_nopref(apr_uint32_t level
 void serf__log(apr_uint32_t level, apr_uint32_t comp, const char *filename,
                serf_config_t *config, const char *fmt, ...);
 
+/* Returns non-zero if logging is enabled for provided LEVEL/COMP.
+ * This function can be useful in cases if logging information if somewhat
+ * expensive to obtain. */
+int serf__log_enabled(apr_uint32_t level, apr_uint32_t comp,
+                      serf_config_t *config);
+
 #endif


Reply via email to