Fossil SCM
Resolve memory leaks in the SVN import which can cause large imports to hit OOM, reported in [forum:bb19df2426679bfc|forum thread bb19df2426679bfc].
Commit
93266c5151d769c1ceb8b83419009bef7eecc47dbe68b5f377acd616dbf3903c
Parent
44f067d2ad4867a…
1 file changed
+4
+4
| --- src/import.c | ||
| +++ src/import.c | ||
| @@ -1584,10 +1584,12 @@ | ||
| 1584 | 1584 | }else{ |
| 1585 | 1585 | blob_zero(&deltaSrc); |
| 1586 | 1586 | } |
| 1587 | 1587 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1588 | 1588 | rid = svn_handle_symlinks(zPerm, &target); |
| 1589 | + blob_reset(&deltaSrc); | |
| 1590 | + blob_reset(&target); | |
| 1589 | 1591 | }else if( rec.contentFlag ){ |
| 1590 | 1592 | rid = svn_handle_symlinks(zPerm, &rec.content); |
| 1591 | 1593 | }else if( zSrcPath ){ |
| 1592 | 1594 | if ( zPerm==0 ){ |
| 1593 | 1595 | zPerm = db_text(0, "SELECT tperm FROM xfiles" |
| @@ -1626,10 +1628,12 @@ | ||
| 1626 | 1628 | " WHERE tpath=%Q AND tbranch=%d" |
| 1627 | 1629 | ")", zFile, branchId); |
| 1628 | 1630 | content_get(rid, &deltaSrc); |
| 1629 | 1631 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1630 | 1632 | rid = svn_handle_symlinks(zPerm, &target); |
| 1633 | + blob_reset(&deltaSrc); | |
| 1634 | + blob_reset(&target); | |
| 1631 | 1635 | }else{ |
| 1632 | 1636 | rid = svn_handle_symlinks(zPerm, &rec.content); |
| 1633 | 1637 | } |
| 1634 | 1638 | db_bind_text(&addFile, ":path", zFile); |
| 1635 | 1639 | db_bind_int(&addFile, ":branch", branchId); |
| 1636 | 1640 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -1584,10 +1584,12 @@ | |
| 1584 | }else{ |
| 1585 | blob_zero(&deltaSrc); |
| 1586 | } |
| 1587 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1588 | rid = svn_handle_symlinks(zPerm, &target); |
| 1589 | }else if( rec.contentFlag ){ |
| 1590 | rid = svn_handle_symlinks(zPerm, &rec.content); |
| 1591 | }else if( zSrcPath ){ |
| 1592 | if ( zPerm==0 ){ |
| 1593 | zPerm = db_text(0, "SELECT tperm FROM xfiles" |
| @@ -1626,10 +1628,12 @@ | |
| 1626 | " WHERE tpath=%Q AND tbranch=%d" |
| 1627 | ")", zFile, branchId); |
| 1628 | content_get(rid, &deltaSrc); |
| 1629 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1630 | rid = svn_handle_symlinks(zPerm, &target); |
| 1631 | }else{ |
| 1632 | rid = svn_handle_symlinks(zPerm, &rec.content); |
| 1633 | } |
| 1634 | db_bind_text(&addFile, ":path", zFile); |
| 1635 | db_bind_int(&addFile, ":branch", branchId); |
| 1636 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -1584,10 +1584,12 @@ | |
| 1584 | }else{ |
| 1585 | blob_zero(&deltaSrc); |
| 1586 | } |
| 1587 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1588 | rid = svn_handle_symlinks(zPerm, &target); |
| 1589 | blob_reset(&deltaSrc); |
| 1590 | blob_reset(&target); |
| 1591 | }else if( rec.contentFlag ){ |
| 1592 | rid = svn_handle_symlinks(zPerm, &rec.content); |
| 1593 | }else if( zSrcPath ){ |
| 1594 | if ( zPerm==0 ){ |
| 1595 | zPerm = db_text(0, "SELECT tperm FROM xfiles" |
| @@ -1626,10 +1628,12 @@ | |
| 1628 | " WHERE tpath=%Q AND tbranch=%d" |
| 1629 | ")", zFile, branchId); |
| 1630 | content_get(rid, &deltaSrc); |
| 1631 | svn_apply_svndiff(&rec.content, &deltaSrc, &target); |
| 1632 | rid = svn_handle_symlinks(zPerm, &target); |
| 1633 | blob_reset(&deltaSrc); |
| 1634 | blob_reset(&target); |
| 1635 | }else{ |
| 1636 | rid = svn_handle_symlinks(zPerm, &rec.content); |
| 1637 | } |
| 1638 | db_bind_text(&addFile, ":path", zFile); |
| 1639 | db_bind_int(&addFile, ":branch", branchId); |
| 1640 |