diff options
author | Shaun Ruffell <sruffell@digium.com> | 2011-01-03 18:25:00 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2011-01-03 18:25:00 +0000 |
commit | 9a5641041a7f0b3bd83447db7474a1ea15a10ab1 (patch) | |
tree | 2b791161636ddb66121f24008a94cba918d315a2 | |
parent | 138ca2fc475c90e68d2d81283770050575a22ddb (diff) |
dahdi_dynamic_loc: Do not call dahdi_dynamic_receive on peers before reg.
It's possible for dahdi_dynamic_loc spans to be "peered" before the
dahdi_span is fully register. Do not call dahdi_dynamic_receive on any
peers before they are fully registered.
Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Kinsey Moore <kmoore@digium.com>
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9566 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rw-r--r-- | drivers/dahdi/dahdi_dynamic_loc.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/dahdi/dahdi_dynamic_loc.c b/drivers/dahdi/dahdi_dynamic_loc.c index 5444110..e661ec9 100644 --- a/drivers/dahdi/dahdi_dynamic_loc.c +++ b/drivers/dahdi/dahdi_dynamic_loc.c @@ -82,10 +82,17 @@ dahdi_dynamic_local_transmit(void *pvt, unsigned char *msg, int msglen) unsigned long flags; spin_lock_irqsave(&local_lock, flags); - if (d->peer && d->peer->span) - dahdi_dynamic_receive(d->peer->span, msg, msglen); - if (d->monitor_rx_peer && d->monitor_rx_peer->span) - dahdi_dynamic_receive(d->monitor_rx_peer->span, msg, msglen); + if (d->peer && d->peer->span) { + if (test_bit(DAHDI_FLAGBIT_REGISTERED, &d->peer->span->flags)) + dahdi_dynamic_receive(d->peer->span, msg, msglen); + } + if (d->monitor_rx_peer && d->monitor_rx_peer->span) { + if (test_bit(DAHDI_FLAGBIT_REGISTERED, + &d->monitor_rx_peer->span->flags)) { + dahdi_dynamic_receive(d->monitor_rx_peer->span, + msg, msglen); + } + } spin_unlock_irqrestore(&local_lock, flags); return 0; } |