提交 8370f0c2 authored 作者: Moises Silva's avatar Moises Silva

freetdm: more iterator fixes

上级 507b7307
...@@ -3597,6 +3597,8 @@ SWITCH_STANDARD_API(ft_function) ...@@ -3597,6 +3597,8 @@ SWITCH_STANDARD_API(ft_function)
{ {
char *mycmd = NULL, *argv[10] = { 0 }; char *mycmd = NULL, *argv[10] = { 0 };
int argc = 0; int argc = 0;
ftdm_iterator_t *chaniter = NULL;
ftdm_iterator_t *curr = NULL;
if (!zstr(cmd) && (mycmd = strdup(cmd))) { if (!zstr(cmd) && (mycmd = strdup(cmd))) {
argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
...@@ -3642,11 +3644,11 @@ SWITCH_STANDARD_API(ft_function) ...@@ -3642,11 +3644,11 @@ SWITCH_STANDARD_API(ft_function)
dump_chan_xml(span, chan_id, stream); dump_chan_xml(span, chan_id, stream);
} }
} else { } else {
uint32_t j; chaniter = ftdm_span_get_chan_iterator(span, NULL);
uint32_t ccount = ftdm_span_get_chan_count(span); for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
for (j = 1; j <= ccount; j++) { dump_chan_xml(span, ftdm_channel_get_id(ftdm_iterator_current(curr)), stream);
dump_chan_xml(span, j, stream);
} }
ftdm_iterator_free(chaniter);
} }
} }
...@@ -3662,12 +3664,12 @@ SWITCH_STANDARD_API(ft_function) ...@@ -3662,12 +3664,12 @@ SWITCH_STANDARD_API(ft_function)
dump_chan(span, chan_id, stream); dump_chan(span, chan_id, stream);
} }
} else { } else {
uint32_t j;
uint32_t ccount = ftdm_span_get_chan_count(span);
stream->write_function(stream, "+OK\n"); stream->write_function(stream, "+OK\n");
for (j = 1; j <= ccount; j++) { chaniter = ftdm_span_get_chan_iterator(span, NULL);
dump_chan(span, j, stream); for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
dump_chan(span, ftdm_channel_get_id(ftdm_iterator_current(curr)), stream);
} }
ftdm_iterator_free(chaniter);
} }
} }
......
...@@ -3602,9 +3602,8 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter) ...@@ -3602,9 +3602,8 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter)
} }
return iter; return iter;
case FTDM_ITERATOR_CHANS: case FTDM_ITERATOR_CHANS:
if (iter->pvt.chaniter.index == iter->pvt.chaniter.span->chan_count) { ftdm_assert_return(iter->pvt.chaniter.index, NULL, "channel iterator index cannot be zero!\n");
return NULL; ftdm_assert_return(iter->pvt.chaniter.index <= iter->pvt.chaniter.span->chan_count, NULL, "channel iterator index bigger than span chan count!\n");
}
iter->pvt.chaniter.index++; iter->pvt.chaniter.index++;
return iter; return iter;
default: default:
...@@ -3629,7 +3628,7 @@ FT_DECLARE(void *) ftdm_iterator_current(ftdm_iterator_t *iter) ...@@ -3629,7 +3628,7 @@ FT_DECLARE(void *) ftdm_iterator_current(ftdm_iterator_t *iter)
return (void *)key; return (void *)key;
case FTDM_ITERATOR_CHANS: case FTDM_ITERATOR_CHANS:
ftdm_assert_return(iter->pvt.chaniter.index, NULL, "channel iterator index cannot be zero!\n"); ftdm_assert_return(iter->pvt.chaniter.index, NULL, "channel iterator index cannot be zero!\n");
ftdm_assert_return(iter->pvt.chaniter.index > iter->pvt.chaniter.span->chan_count, NULL, "channel iterator index bigger than span chan count!\n"); ftdm_assert_return(iter->pvt.chaniter.index <= iter->pvt.chaniter.span->chan_count, NULL, "channel iterator index bigger than span chan count!\n");
return iter->pvt.chaniter.span->channels[iter->pvt.chaniter.index]; return iter->pvt.chaniter.span->channels[iter->pvt.chaniter.index];
default: default:
break; break;
...@@ -3652,6 +3651,7 @@ FT_DECLARE(ftdm_status_t) ftdm_iterator_free(ftdm_iterator_t *iter) ...@@ -3652,6 +3651,7 @@ FT_DECLARE(ftdm_status_t) ftdm_iterator_free(ftdm_iterator_t *iter)
} }
ftdm_assert_return(iter->type, FTDM_FAIL, "Cannot free invalid iterator\n"); ftdm_assert_return(iter->type, FTDM_FAIL, "Cannot free invalid iterator\n");
ftdm_log(FTDM_LOG_DEBUG, "Freeing iterator %p\n", iter);
ftdm_safe_free(iter); ftdm_safe_free(iter);
return FTDM_SUCCESS; return FTDM_SUCCESS;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论