On Thu, Jun 20, 2013 at 6:43 PM, Rainer Jung <rainer.j...@kippdata.de> wrote:
> Hi there,
>
> I built and tested svn 1.8.0 today on Solaris 0 Sparc and got lots of
> test failures due to core dumps.
>
> The first few dumps I inspected all showed a bus error in
>
> #0  0xfe660760 in cache_lookup (path=0x10fce06 "/A/D/H/pi3", revision=3,
> cache=0x17c1820) at subversion/libsvn_fs_fs/tree.c:357
>
> The code is:
>
> for (i = 0; i + 4 <= path_len; i += 4)
>   hash_value = hash_value * 0xd1f3da69 + *(const apr_uint32_t*)(path + i);
>
It seems the code is missing #ifdef SVN_UNALIGNED_ACCESS_IS_OK . The
attached patch should fix problem, but I'm not sure that this is right
solution for the problem.

-- 
Ivan Zhakov
CTO | VisualSVN | http://www.visualsvn.com
Index: subversion/libsvn_fs_fs/tree.c
===================================================================
--- subversion/libsvn_fs_fs/tree.c      (revision 1494562)
+++ subversion/libsvn_fs_fs/tree.c      (working copy)
@@ -353,8 +353,11 @@
 
   /* need to do a full lookup.  Calculate the hash value
      (HASH_VALUE has been initialized to REVISION). */
+
+#ifdef SVN_UNALIGNED_ACCESS_IS_OK
   for (i = 0; i + 4 <= path_len; i += 4)
     hash_value = hash_value * 0xd1f3da69 + *(const apr_uint32_t*)(path + i);
+#endif
 
   for (; i < path_len; ++i)
     hash_value = hash_value * 33 + path[i];

Reply via email to