Author: brane
Date: Fri Dec 14 04:57:42 2012
New Revision: 1421668

URL: http://svn.apache.org/viewvc?rev=1421668&view=rev
Log:
Remove SVN_ERR__TRACED from the public headers.  No-one should be able to create
traces without calling svn_error_trace, so there's no reason to expose this
private symbol.  Hiding it incidentally allows us to slightly optimize the
is-tracing-link predicate.

* subversion/include/svn_error.h (SVN_ERR__TRACE): Remove.
* subversion/libsvn_subr/error.c (error_tracing_link): New static string.
  (svn_error__trace): Use make_error_internal instead of svn_error_quick_wrap.
  (svn_error__is_tracing_link): Use direct pointer comparison in predicate.

* subversion/tests/libsvn_subr/error-test.c (test_error_purge_tracing):
   Manually construct tracing-only error chain without relying on the
   (now-gone) SVN_ERR__TRACED; instead, rely on insider info about the
   implementation.

Modified:
    subversion/trunk/subversion/include/svn_error.h
    subversion/trunk/subversion/libsvn_subr/error.c
    subversion/trunk/subversion/tests/libsvn_subr/error-test.c

Modified: subversion/trunk/subversion/include/svn_error.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_error.h?rev=1421668&r1=1421667&r2=1421668&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_error.h (original)
+++ subversion/trunk/subversion/include/svn_error.h Fri Dec 14 04:57:42 2012
@@ -315,8 +315,6 @@ svn_handle_warning(FILE *stream,
  * @since New in 1.7.
  */
 #ifdef SVN_ERR__TRACING
-#define SVN_ERR__TRACED "traced call"
-
 svn_error_t *
 svn_error__trace(const char *file, long line, svn_error_t *err);
 

Modified: subversion/trunk/subversion/libsvn_subr/error.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/error.c?rev=1421668&r1=1421667&r2=1421668&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/error.c (original)
+++ subversion/trunk/subversion/libsvn_subr/error.c Fri Dec 14 04:57:42 2012
@@ -221,6 +221,8 @@ svn_error_quick_wrap(svn_error_t *child,
                           new_msg);
 }
 
+/* Messages in tracing errors all point to this static string. */
+static const char error_tracing_link[] = "traced call";
 
 svn_error_t *
 svn_error__trace(const char *file, long line, svn_error_t *err)
@@ -235,8 +237,11 @@ svn_error__trace(const char *file, long 
   /* Only do the work when an error occurs.  */
   if (err)
     {
+      svn_error_t *trace;
       svn_error__locate(file, line);
-      return svn_error_quick_wrap(err, SVN_ERR__TRACED);
+      trace = make_error_internal(err->apr_err, err);
+      trace->message = error_tracing_link;
+      return trace;
     }
   return SVN_NO_ERROR;
 
@@ -379,11 +384,7 @@ svn_boolean_t
 svn_error__is_tracing_link(svn_error_t *err)
 {
 #ifdef SVN_ERR__TRACING
-  /* ### A strcmp()?  Really?  I think it's the best we can do unless
-     ### we add a boolean field to svn_error_t that's set only for
-     ### these "placeholder error chain" items.  Not such a bad idea,
-     ### really...  */
-  return (err && err->message && !strcmp(err->message, SVN_ERR__TRACED));
+  return (err && err->message == error_tracing_link);
 #else
   return FALSE;
 #endif

Modified: subversion/trunk/subversion/tests/libsvn_subr/error-test.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/error-test.c?rev=1421668&r1=1421667&r2=1421668&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/error-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/error-test.c Fri Dec 14 
04:57:42 2012
@@ -125,8 +125,9 @@ test_error_purge_tracing(apr_pool_t *poo
     svn_error_malfunction_handler_t orig_handler;
 
     /* For this test, use a random error status. */
-    err = svn_error_create(SVN_ERR_BAD_UUID, NULL, SVN_ERR__TRACED);
+    err = svn_error_create(SVN_ERR_BAD_UUID, NULL, "");
     err = svn_error_trace(err);
+    err->child->message = err->message;
 
     /* Register a malfunction handler that doesn't call abort() to
        check that a new error chain with an assertion error is


Reply via email to