From bfb4d34715d648b9f7bc272de3ccf51323ba3ae8 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 28 Aug 2015 16:42:23 -0600 Subject: [PATCH] fix memory accounting for useless channels Fix accounting for a channel that is without a peer for sending and/or receiving. --- racket/src/racket/gc2/mem_account.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/racket/src/racket/gc2/mem_account.c b/racket/src/racket/gc2/mem_account.c index dee0990d92..7121add724 100644 --- a/racket/src/racket/gc2/mem_account.c +++ b/racket/src/racket/gc2/mem_account.c @@ -441,8 +441,10 @@ int BTC_bi_chan_mark(void *p, struct NewGC *gc) /* Race conditions here on `mem_size', and likely double counting when the same async channels are accessible from paired bi channels --- but those approximations are ok for accounting. */ - account_memory(gc, gc->current_mark_owner, gcBYTES_TO_WORDS(bc->link->sendch->mem_size), 0); - account_memory(gc, gc->current_mark_owner, gcBYTES_TO_WORDS(bc->link->recvch->mem_size), 0); + if (bc->link->sendch) + account_memory(gc, gc->current_mark_owner, gcBYTES_TO_WORDS(bc->link->sendch->mem_size), 0); + if (bc->link->recvch) + account_memory(gc, gc->current_mark_owner, gcBYTES_TO_WORDS(bc->link->recvch->mem_size), 0); } return gc->mark_table[btc_redirect_bi_chan](p, gc); }