zap_mutex_unlock(span->mutex);
}
+static __inline__ void zap_clear_flag_all(zap_span_t *span, uint32_t flag)
+{
+ uint32_t j;
+ zap_mutex_lock(span->mutex);
+ for(j = 1; j <= span->chan_count; j++) {
+ zap_clear_flag_locked((span->channels[j]), flag);
+ }
+ zap_mutex_unlock(span->mutex);
+}
+
#endif
/* For Emacs:
zap_set_state_locked(event->channel, ZAP_CHANNEL_STATE_RESTART);
}
}
-
- if (event->channel->type == ZAP_CHAN_TYPE_DQ921) {
- zap_log(ZAP_LOG_WARNING, "Stopping ISDN for span %s\n", span->name);
- span->stop(span);
- }
+
zap_set_flag(event->channel, ZAP_CHANNEL_SUSPENDED);
+
+
zap_channel_get_alarms(event->channel);
isdn_data->sig_cb(&sig);
- zap_log(ZAP_LOG_WARNING, "channel %d:%d (%d:%d) has alarms [%s]\n",
+ zap_log(ZAP_LOG_WARNING, "channel %d:%d (%d:%d) has alarms! [%s]\n",
event->channel->span_id, event->channel->chan_id,
event->channel->physical_span_id, event->channel->physical_chan_id,
event->channel->last_error);
break;
case ZAP_OOB_ALARM_CLEAR:
{
-
- if (event->channel->type == ZAP_CHAN_TYPE_DQ921) {
- zap_log(ZAP_LOG_WARNING, "Resuming ISDN for span %s\n", span->name);
- span->start(span);
- }
+
+ zap_log(ZAP_LOG_WARNING, "channel %d:%d (%d:%d) alarms Cleared!\n", event->channel->span_id, event->channel->chan_id,
+ event->channel->physical_span_id, event->channel->physical_chan_id);
sig.event_id = ZAP_OOB_ALARM_CLEAR;
zap_clear_flag(event->channel, ZAP_CHANNEL_SUSPENDED);
{
errs = 0;
if (flags & ZAP_READ) {
+
+ if (zap_test_flag(isdn_data->dchan, ZAP_CHANNEL_SUSPENDED)) {
+ zap_clear_flag_all(span, ZAP_CHANNEL_SUSPENDED);
+ }
len = sizeof(frame);
if (zap_channel_read(isdn_data->dchan, frame, &len) == ZAP_SUCCESS) {
#ifdef IODEBUG