diff --git a/linux/drivers/dahdi/dahdi_dynamic.c b/linux/drivers/dahdi/dahdi_dynamic.c index 31a6c30..a650b1e 100644 --- a/linux/drivers/dahdi/dahdi_dynamic.c +++ b/linux/drivers/dahdi/dahdi_dynamic.c @@ -232,11 +232,6 @@ static void __ztdynamic_run(void) rcu_read_lock(); list_for_each_entry_rcu(z, &dspan_list, list) { if (!z->dead) { - for (y=0;yspan.channels;y++) { - /* Echo cancel double buffered data */ - dahdi_ec_chunk(z->span.chans[y], z->span.chans[y]->readchunk, z->span.chans[y]->writechunk); - } - dahdi_receive(&z->span); dahdi_transmit(&z->span); /* Handle all transmissions now */ ztd_sendmessage(z); @@ -402,6 +397,14 @@ void dahdi_dynamic_receive(struct dahdi_span *span, unsigned char *msg, int msgl if (unlikely(rxpos != rxcnt)) printk(KERN_NOTICE "Span %s: Expected seq no %d, but received %d instead\n", span->name, rxcnt, rxpos); + for (x=0;xchannels;x++) { + /* Echo cancel double buffered data */ + dahdi_ec_chunk(span->chans[x], + span->chans[x]->readchunk, + span->chans[x]->writechunk); + } + dahdi_receive(span); + /* If this is our master span, then run everything */ if (master) ztdynamic_run();