summaryrefslogtreecommitdiff
path: root/drivers/dahdi/dahdi_dynamic_loc.c
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2011-01-03 18:25:00 +0000
committerShaun Ruffell <sruffell@digium.com>2011-01-03 18:25:00 +0000
commit9a5641041a7f0b3bd83447db7474a1ea15a10ab1 (patch)
tree2b791161636ddb66121f24008a94cba918d315a2 /drivers/dahdi/dahdi_dynamic_loc.c
parent138ca2fc475c90e68d2d81283770050575a22ddb (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
Diffstat (limited to 'drivers/dahdi/dahdi_dynamic_loc.c')
-rw-r--r--drivers/dahdi/dahdi_dynamic_loc.c15
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;
}