A few comments on the testsuite part of the patch.

First, I intend to test the patch using the attached pastebin script by
Trent, in addition to 'make check'.

Second:

Trent Nelson wrote on Mon, Jan 23, 2012 at 15:07:20 -0500:
> Index: subversion/bindings/swig/python/tests/mergeinfo.py
> ===================================================================
> --- subversion/bindings/swig/python/tests/mergeinfo.py        (revision 
> 1234786)
> +++ subversion/bindings/swig/python/tests/mergeinfo.py        (working copy)
> +  def test_mergeinfo_leakage__lingering_range_t_objects_after_del(self):
> +    """Ensure that there are no svn_merge_range_t objects being tracked by
> +       the garbage collector after we explicitly `del` the results returned
> +       by svn_mergeinfo_parse().  We disable gc before the 
> svn_mergeinfo_parse
> +       call and force an explicit collection cycle straight after the `del`;
> +       if our reference counts are correct, the allocated svn_merge_range_t
> +       objects will be garbage collected and thus, not appear in the list of
> +       objects returned by gc.get_objects()."""
> +    gc.disable()
> +    mergeinfo = core.svn_mergeinfo_parse(self.TEXT_MERGEINFO1)
> +    del mergeinfo
> +    gc.collect()

It seems you need a gc.enable() call as well, to prevent the test from
having effects on global state.

Do the swig-py tests support parallelized running?  The testsuite for
'svn' does, and if the testsuite for swig-py does too then the 'gc' call
have effects on other threads.

> +    lingering = get_svn_merge_range_t_objects()
> +    self.assertEquals(lingering, list(), (
> +      "Memory leak!  Found lingering svn_merge_range_t objects left over 
> from "
> +      "our call to svn_mergeinfo_parse(), even though we explicitly deleted "
> +      "the returned mergeinfo object.  Probable cause: incorrect Py_INCREF/"
> +      "Py_DECREF usage in libsvn_swig_py/swigutil_py.c.  Lingering 
> objects:\n"
> +      "%s" % lingering))
#!/usr/bin/env python

import gc
gc.disable()
gc.set_debug(gc.DEBUG_LEAK)

import os
import sys
import svn
import svn.core

svn_mergeinfo_diff      = svn.core.svn_mergeinfo_diff
svn_mergeinfo_parse     = svn.core.svn_mergeinfo_parse
svn_rangelist_to_string = svn.core.svn_rangelist_to_string

# r1213743
OLD_VALUE = """\
/subversion/branches/1.5.x-r30215:870312
/subversion/branches/1.7.x-JavaHL-pools:1158684-1158722
/subversion/branches/1.7.x-issue3888:1148937-1149162
/subversion/branches/1.7.x-issue3975:1160761-1161546
/subversion/branches/1.7.x-issue3976:1161731-1165397
/subversion/branches/1.7.x-issue4032:1186668-1186784
/subversion/branches/1.7.x-issue4035:1186202-1186315
/subversion/branches/1.7.x-issue4035-r1185738:1186316-1186778
/subversion/branches/1.7.x-issue4k:1166502-1167193
/subversion/branches/1.7.x-neon-default:1148803-1158680
/subversion/branches/1.7.x-r1152189:1152759-1154249
/subversion/branches/1.7.x-r1155160:1158704-1159223
/subversion/branches/1.7.x-r1159093:1159097-1159230
/subversion/branches/1.7.x-r1163557:1163574-1170648
/subversion/branches/1.7.x-r1173425:1173429-1176454
/subversion/branches/1.7.x-r1180154:1186224-1186351
/subversion/branches/1.7.x-r1201824:1202121-1207333
/subversion/branches/atomic-revprop:965046-1000689
/subversion/branches/bdb-reverse-deltas:872050-872529
/subversion/branches/diff-callbacks3:870059-870761
/subversion/branches/diff-optimizations:1031270-1037352
/subversion/branches/diff-optimizations-bytes:1037353-1067789
/subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118
/subversion/branches/double-delete:870511-872970
/subversion/branches/explore-wc:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
/subversion/branches/file-externals:871779-873302
/subversion/branches/fs-rep-sharing:869036-873803
/subversion/branches/fsfs-pack:873717-874575
/subversion/branches/gnome-keyring:870558-871410
/subversion/branches/http-protocol-v2:874395-876041
/subversion/branches/in-memory-cache:869829-871452
/subversion/branches/integrate-cache-item-serialization:1068724-1068739
/subversion/branches/integrate-cache-membuffer:998649-998852
/subversion/branches/integrate-compression-level:1068651-1072287
/subversion/branches/integrate-io-improvements:1068684-1072297
/subversion/branches/integrate-is-cachable:1072568-1074082
/subversion/branches/integrate-partial-getter:1072558-1076552
/subversion/branches/integrate-readline-speedup:1072553-1072555
/subversion/branches/integrate-stream-api-extensions:1068695-1072516
/subversion/branches/integrate-txdelta-caching:1072541-1078213
/subversion/branches/issue-2779-dev:965496-984198
/subversion/branches/issue-2843-dev:871432-874179
/subversion/branches/issue-3000:871713,871716-871719,871721-871726,871728,871734
/subversion/branches/issue-3067-deleted-subtrees:873375-874084
/subversion/branches/issue-3148-dev:875193-875204
/subversion/branches/issue-3220-dev:872210-872226
/subversion/branches/issue-3242-dev:879653-896436
/subversion/branches/issue-3334-dirs:875156-875867
/subversion/branches/issue-3975:1152931-1160746
/subversion/branches/kwallet:870785-871314
/subversion/branches/log-g-performance:870941-871032
/subversion/branches/merge-skips-obstructions:874525-874615
/subversion/branches/nfc-nfd-aware-client:870276,870376
/subversion/branches/performance:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985695,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335-1029336,1029339-1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
/subversion/branches/py-tests-as-modules:956579-1033052
/subversion/branches/ra_serf-digest-authn:875693-876404
/subversion/branches/reintegrate-improvements:873853-874164
/subversion/branches/revprop-packing:1143907,1143971,1143997,1144017,1144499,1144568
/subversion/branches/subtree-mergeinfo:876734-878766
/subversion/branches/svn-mergeinfo-enhancements:870119-870195,870197-870288
/subversion/branches/svn-patch-improvements:918519-934609
/subversion/branches/svnpatch-diff:865738-876477
/subversion/branches/svnraisetc:874709-875149
/subversion/branches/svnserve-logging:869828-870893
/subversion/branches/tc-issue-3334:874697-874773
/subversion/branches/tc-merge-notify:874017-874062
/subversion/branches/tc-resolve:874191-874239
/subversion/branches/tc_url_rev:874351-874483
/subversion/branches/tree-conflicts:868291-873154
/subversion/branches/tree-conflicts-notify:873926-874008
/subversion/branches/uris-as-urls:1060426-1064427
/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147299,1147309,1147882,1148071,1148083,1148094,1148131,1148374,1148424,1148566,1148588,1148652,1148662,1148699,1148853,1148877,1148882,1148936,1149103,1149105,1149135,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151854,1151906,1151911,1152129,1152140,1152189-1152190,1152267,1152282,1152286,1152726,1152809,1153138,1153141,1153416,1153540,1153566,1153799,1153807,1153968,1154009,1154023,1154115,1154119,1154121,1154144,1154155,1154159,1154165,1154215,1154225,1154273,1154278,1154379,1154382,1154461,1154717-1154718,1154733,1154908,1154982,1155015,1155044,1155124,1155131,1155160,1155313,1155334,1155391,1155404,1156085,1156098,1156216,1156218,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,1158187,1158193-1158194,1158196,1158201,1158207,1158209-1158210,1158217,1158285,1158288,1158303,1158309,1158407,1158419,1158421,1158436,1158455,1158616-1158617,1158634,1158854,1158875,1158886,1158893,1158896,1158919,1158924,1158963,1159093,1159098,1159101,1159132,1159136,1159148,1159230,1159275,1159400,1159686,1159760,1159772,1160605,1160671,1160682,1160704-1160705,1160756,1161063,1161080,1161185,1161210,1161683,1161721,1162024,1162033,1162201,1162516,1162880,1162974,1162995,1163243,1163383,1163557,1163792,1163953,1164027,1164386,1164426,1164517,1164535,1164554,1164580,1164614,1164645,1164760,1164765,1166500,1166555,1166678,1167062,1167173,1167209,1167269,1167503,1167659,1167681,1169524,1169531,1169650,1171708,1173111,1173425,1173639,1174051,1174060,1174652,1174761,1174797-1174798,1174806,1175888,1176915,1176949,1177001,1177492,1177732,1178280,1178282,1178942,1179680,1179767,1180154,1181090,1181110,1181155,1181215,1181609,1181666,1182115,1182527,1182771,1182904,1182909,1183054,1183263,1183347,1185222,1185242,1185280,1185282,1185730,1185738,1185746,1185763,1185768,1185886,1185911,1185918,1186059,1186092,1186101,1186107,1186109,1186121,1186231,1186240,1186422,1186434,1186732,1186755,1186784,1186815,1186928,1186944,1186981,1186983,1187311,1187676,1187695,1188609,1188652,1188677,1188762,1188774,1189190,1189261,1189395,1189580,1189665,1197135,1197998,1199876,1199950,1200837,1201002,1201824,1202135,1202187,1202630,1202807,1203546,1203651,1203653,1204167,1204478,1204610,1204673,1205193,1205726,1205839,1205848,1206523,1206533"""

# r1213744
NEW_VALUE = """\
/subversion/branches/1.5.x-r30215:870312
/subversion/branches/1.7.x-JavaHL-pools:1158684-1158722
/subversion/branches/1.7.x-issue3888:1148937-1149162
/subversion/branches/1.7.x-issue3975:1160761-1161546
/subversion/branches/1.7.x-issue3976:1161731-1165397
/subversion/branches/1.7.x-issue4032:1186668-1186784
/subversion/branches/1.7.x-issue4035:1186202-1186315
/subversion/branches/1.7.x-issue4035-r1185738:1186316-1186778
/subversion/branches/1.7.x-issue4k:1166502-1167193
/subversion/branches/1.7.x-neon-default:1148803-1158680
/subversion/branches/1.7.x-r1152189:1152759-1154249
/subversion/branches/1.7.x-r1155160:1158704-1159223
/subversion/branches/1.7.x-r1159093:1159097-1159230
/subversion/branches/1.7.x-r1163557:1163574-1170648
/subversion/branches/1.7.x-r1173425:1173429-1176454
/subversion/branches/1.7.x-r1180154:1186224-1186351
/subversion/branches/1.7.x-r1201824:1202121-1207333
/subversion/branches/atomic-revprop:965046-1000689
/subversion/branches/bdb-reverse-deltas:872050-872529
/subversion/branches/diff-callbacks3:870059-870761
/subversion/branches/diff-optimizations:1031270-1037352
/subversion/branches/diff-optimizations-bytes:1037353-1067789
/subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118
/subversion/branches/double-delete:870511-872970
/subversion/branches/explore-wc:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
/subversion/branches/file-externals:871779-873302
/subversion/branches/fs-rep-sharing:869036-873803
/subversion/branches/fsfs-pack:873717-874575
/subversion/branches/gnome-keyring:870558-871410
/subversion/branches/http-protocol-v2:874395-876041
/subversion/branches/in-memory-cache:869829-871452
/subversion/branches/integrate-cache-item-serialization:1068724-1068739
/subversion/branches/integrate-cache-membuffer:998649-998852
/subversion/branches/integrate-compression-level:1068651-1072287
/subversion/branches/integrate-io-improvements:1068684-1072297
/subversion/branches/integrate-is-cachable:1072568-1074082
/subversion/branches/integrate-partial-getter:1072558-1076552
/subversion/branches/integrate-readline-speedup:1072553-1072555
/subversion/branches/integrate-stream-api-extensions:1068695-1072516
/subversion/branches/integrate-txdelta-caching:1072541-1078213
/subversion/branches/issue-2779-dev:965496-984198
/subversion/branches/issue-2843-dev:871432-874179
/subversion/branches/issue-3000:871713,871716-871719,871721-871726,871728,871734
/subversion/branches/issue-3067-deleted-subtrees:873375-874084
/subversion/branches/issue-3148-dev:875193-875204
/subversion/branches/issue-3220-dev:872210-872226
/subversion/branches/issue-3242-dev:879653-896436
/subversion/branches/issue-3334-dirs:875156-875867
/subversion/branches/issue-3975:1152931-1160746
/subversion/branches/kwallet:870785-871314
/subversion/branches/log-g-performance:870941-871032
/subversion/branches/merge-skips-obstructions:874525-874615
/subversion/branches/nfc-nfd-aware-client:870276,870376
/subversion/branches/performance:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985695,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335-1029336,1029339-1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
/subversion/branches/py-tests-as-modules:956579-1033052
/subversion/branches/ra_serf-digest-authn:875693-876404
/subversion/branches/reintegrate-improvements:873853-874164
/subversion/branches/revprop-packing:1143907,1143971,1143997,1144017,1144499,1144568
/subversion/branches/subtree-mergeinfo:876734-878766
/subversion/branches/svn-mergeinfo-enhancements:870119-870195,870197-870288
/subversion/branches/svn-patch-improvements:918519-934609
/subversion/branches/svnpatch-diff:865738-876477
/subversion/branches/svnraisetc:874709-875149
/subversion/branches/svnserve-logging:869828-870893
/subversion/branches/tc-issue-3334:874697-874773
/subversion/branches/tc-merge-notify:874017-874062
/subversion/branches/tc-resolve:874191-874239
/subversion/branches/tc_url_rev:874351-874483
/subversion/branches/tree-conflicts:868291-873154
/subversion/branches/tree-conflicts-notify:873926-874008
/subversion/branches/uris-as-urls:1060426-1064427
/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147299,1147309,1147882,1148071,1148083,1148094,1148131,1148374,1148424,1148566,1148588,1148652,1148662,1148699,1148853,1148877,1148882,1148936,1149103,1149105,1149135,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151854,1151906,1151911,1152129,1152140,1152189-1152190,1152267,1152282,1152286,1152726,1152809,1153138,1153141,1153416,1153540,1153566,1153799,1153807,1153968,1154009,1154023,1154115,1154119,1154121,1154144,1154155,1154159,1154165,1154215,1154225,1154273,1154278,1154379,1154382,1154461,1154717-1154718,1154733,1154908,1154982,1155015,1155044,1155124,1155131,1155160,1155313,1155334,1155391,1155404,1156085,1156098,1156216,1156218,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,1158187,1158193-1158194,1158196,1158201,1158207,1158209-1158210,1158217,1158285,1158288,1158303,1158309,1158407,1158419,1158421,1158436,1158455,1158616-1158617,1158634,1158854,1158875,1158886,1158893,1158896,1158919,1158924,1158963,1159093,1159098,1159101,1159132,1159136,1159148,1159230,1159275,1159400,1159686,1159760,1159772,1160605,1160671,1160682,1160704-1160705,1160756,1161063,1161080,1161185,1161210,1161683,1161721,1162024,1162033,1162201,1162516,1162880,1162974,1162995,1163243,1163383,1163557,1163792,1163953,1164027,1164386,1164426,1164517,1164535,1164554,1164580,1164614,1164645,1164760,1164765,1166500,1166555,1166678,1167062,1167173,1167209,1167269,1167503,1167659,1167681,1169524,1169531,1169650,1171708,1173111,1173425,1173639,1174051,1174060,1174652,1174761,1174797-1174798,1174806,1175888,1176915,1176949,1177001,1177492,1177732,1178280,1178282,1178942,1179680,1179767,1180154,1181090,1181110,1181155,1181215,1181609,1181666,1182115,1182527,1182771,1182904,1182909,1183054,1183263,1183347,1185222,1185242,1185280,1185282,1185730,1185738,1185746,1185763,1185768,1185886,1185911,1185918,1186059,1186092,1186101,1186107,1186109,1186121,1186231,1186240,1186422,1186434,1186732,1186755,1186784,1186815,1186928,1186944,1186981,1186983,1187311,1187676,1187695,1188609,1188652,1188677,1188762,1188774,1189190,1189261,1189395,1189580,1189665,1197135,1197998,1199876,1199950,1200837,1201002,1201824,1202135,1202187,1202630,1202807,1203546,1203651,1203653,1204167,1204478,1204610,1204673,1205193,1205726,1205839,1205848,1206523,1206533,1211859,1211885"""

def pause():
    raw_input('press any key to continue...')
    return

def t1(count):
    for i in xrange(0, int(count)):
        print "loop: %d" % i
        t1_loop()
        gc.collect()
        if (i % 100) == 0:
            pause()

    #svn.core.application_pool.clear()
    pause()

def t1_loop():
    pool = svn.core.Pool()

    old = svn_mergeinfo_parse(OLD_VALUE, pool)
    new = svn_mergeinfo_parse(NEW_VALUE, pool)

    (deleted, added) = svn_mergeinfo_diff(old, new, True, pool)

    merged = dict()
    reverse_merged = dict()

    for (k, v) in deleted.items():
        assert k not in reverse_merged
        reverse_merged[k] = svn_rangelist_to_string(v, pool)

    for (k, v) in added.items():
        assert k not in merged
        merged[k] = svn_rangelist_to_string(v, pool)

    del merged
    del reverse_merged

    del old
    del new
    del deleted
    del added

    pool.destroy()
    del pool

if __name__ == '__main__':
    count = 500 if len(sys.argv) < 2 else sys.argv[1]
    t1(count)

# vim:set ts=8 sw=4 sts=4 tw=78 et:

Reply via email to