From 56a6e402ae38b070559d044ac2140263dc97260b Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Mon, 3 Jan 2011 18:25:00 +0000 Subject: [PATCH] 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 Acked-by: Kinsey Moore git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9566 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- drivers/dahdi/dahdi_dynamic_loc.c | 15 +++++++++++---- 1 file 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; }