• Show log

    Commit

  • Hash : c4df926b
    Author : brian m. carlson
    Date : 2019-07-16T21:54:10

    pack-objects: allocate memory more efficiently
    
    The packbuilder code allocates memory in chunks. When it needs to
    allocate, it tries to add 1024 to the number of objects and multiply by
    3/2. However, it actually multiplies by 1 instead, since it performs an
    integral division in the expression "3 / 2" and only then multiplies by
    the increased number of objects.
    
    The current behavior causes the code to waste massive amounts of time
    copying memory when it reallocates, causing inserting all non-blob
    objects in the Linux repository into a new pack to take some
    indeterminate time greater than 5 minutes instead of 52 seconds.
    
    Correct this error by first dividing by two, and only then multiplying
    by 3. We still check for overflow for the multiplication, which is the
    only part that can overflow. This appears to be the only place in the
    code base which has this problem.