diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-11-08 21:03:08 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-11-08 21:03:08 +0100 |
commit | 5cbffd6e6b4430724532beb5bb130ea701cd1a70 (patch) | |
tree | 590f62bc7b561555c4c4a1818be31d3ea234b9ed /sys/src/9/port | |
parent | 8f782ac916c3dd480e131c70b9c71e3479acdabd (diff) |
kernel/qio: maintain Block.next pointer in padblock()
Diffstat (limited to 'sys/src/9/port')
-rw-r--r-- | sys/src/9/port/qio.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/sys/src/9/port/qio.c b/sys/src/9/port/qio.c index ea2f02dd0..bd026e5a9 100644 --- a/sys/src/9/port/qio.c +++ b/sys/src/9/port/qio.c @@ -78,16 +78,12 @@ padblock(Block *bp, int size) int n; Block *nbp; - if(bp->next != nil) - panic("padblock %#p", getcallerpc(&bp)); - - QDEBUG checkb(bp, "padblock 1"); + QDEBUG checkb(bp, "padblock 0"); if(size >= 0){ if(bp->rp - bp->base >= size){ bp->rp -= size; return bp; } - n = BLEN(bp); nbp = allocb(size+n); nbp->rp += size; @@ -99,12 +95,12 @@ padblock(Block *bp, int size) size = -size; if(bp->lim - bp->wp >= size) return bp; - n = BLEN(bp); - nbp = allocb(size+n); + nbp = allocb(n+size); memmove(nbp->wp, bp->rp, n); nbp->wp += n; } + nbp->next = bp->next; freeb(bp); padblockcnt++; QDEBUG checkb(nbp, "padblock 1"); |