Quick tweak to reduce allocations on this codepath. LINE->data is a non-const string so we can just parse it in-place without the full generality of svn_cstring_split().
[[[ Index: subversion/libsvn_fs_fs/fs_fs.c =================================================================== --- subversion/libsvn_fs_fs/fs_fs.c (revision 1170019) +++ subversion/libsvn_fs_fs/fs_fs.c (working copy) @@ -7972,7 +7972,6 @@ read_successor_candidate_revisions(apr_array_heade SVN_ERR(svn_stream_readline(stream, &line, "\n", &eof, iterpool)); if (line->len) { - apr_array_header_t *split; const char *pred; svn_fs_id_t *pred_id; const char *revstr; @@ -7980,27 +7979,28 @@ read_successor_candidate_revisions(apr_array_heade #if SVN_VER_MINOR >=8 apr_uint64_t rev64; #endif + const char *p; - split = svn_cstring_split(line->data, " ", TRUE, iterpool); - if (split->nelts != 2) + p = strchr(line->data, ' '); + if (p == NULL) return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL, _("Corrupt line '%s' in file '%s'"), line->data, node_revs_file_abspath); - pred = APR_ARRAY_IDX(split, 0, const char *); - pred_id = svn_fs_fs__id_parse(pred, strlen(pred), iterpool); + pred = line->data; + pred_id = svn_fs_fs__id_parse(pred, p - line->data, iterpool); if (pred_id == NULL) return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL, _("Corrupt line '%s' in file '%s'"), line->data, node_revs_file_abspath); #if SVN_VER_MINOR >=8 - revstr = APR_ARRAY_IDX(split, 1, const char *); + revstr = p+1; SVN_ERR(svn_cstring_strtoui64(&rev64, revstr, 0, LONG_MAX, 10 /* base */)); rev = (long) rev64; #else - revstr = APR_ARRAY_IDX(split, 1, const char *); + revstr = p+1; rev = apr_atoi64(revstr); #endif ]]]