X-Git-Url: https://git.donarmstrong.com/?p=samtools.git;a=blobdiff_plain;f=bam_sort.c;h=7d00cd1a83321729c1384cf56f066d2c83f65548;hp=c451dcf63bcafa49563aefd2819c07bc6a1f5ddc;hb=307c147168f7154e3755712797078c513e0b242a;hpb=3db228b4963ad3767cfc084e29319a3562b331f9 diff --git a/bam_sort.c b/bam_sort.c index c451dcf..7d00cd1 100644 --- a/bam_sort.c +++ b/bam_sort.c @@ -472,6 +472,11 @@ void bam_sort_core_ext(int is_by_qname, const char *fn, const char *prefix, size if (buf[k] == 0) buf[k] = (bam1_t*)calloc(1, sizeof(bam1_t)); b = buf[k]; if ((ret = bam_read1(fp, b)) < 0) break; + if (b->data_len < b->m_data>>2) { // shrink + b->m_data = b->data_len; + kroundup32(b->m_data); + b->data = realloc(b->data, b->m_data); + } mem += sizeof(bam1_t) + b->m_data + sizeof(void*) + sizeof(void*); // two sizeof(void*) for the data allocated to pointer arrays ++k; if (mem >= max_mem) {