fix potential GC problem while setting up a place channel
This commit is contained in:
parent
5a33856802
commit
aaf098f203
|
@ -438,6 +438,9 @@ int BTC_bi_chan_mark(void *p, struct NewGC *gc)
|
|||
{
|
||||
if (gc->doing_memory_accounting) {
|
||||
Scheme_Place_Bi_Channel *bc = (Scheme_Place_Bi_Channel *)p;
|
||||
/* The `link` field can be NULL if the channel is still being
|
||||
set up: */
|
||||
if (bc->link) {
|
||||
/* 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. */
|
||||
|
@ -446,6 +449,7 @@ int BTC_bi_chan_mark(void *p, struct NewGC *gc)
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user