diff --git a/daemon/call.c b/daemon/call.c index ec9e36632..350f9b5e7 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1208,8 +1208,18 @@ int __init_stream(struct packet_stream *ps) { return 0; } +static void rtp_stats_add_pt(GHashTable *dst, const struct rtp_payload_type *pt) { + struct rtp_stats *rs = g_hash_table_lookup(dst, GINT_TO_POINTER(pt->payload_type)); + if (rs) + return; + + rs = bufferpool_alloc0(shm_bufferpool, sizeof(*rs)); + rs->payload_type = pt->payload_type; + rs->clock_rate = pt->clock_rate; + g_hash_table_insert(dst, GINT_TO_POINTER(rs->payload_type), rs); +} + void __rtp_stats_update(GHashTable *dst, struct codec_store *cs) { - struct rtp_stats *rs; rtp_payload_type *pt; codecs_ht src = cs->codecs; @@ -1219,16 +1229,8 @@ void __rtp_stats_update(GHashTable *dst, struct codec_store *cs) { codecs_ht_iter iter; t_hash_table_iter_init(&iter, src); - while (t_hash_table_iter_next(&iter, NULL, &pt)) { - rs = g_hash_table_lookup(dst, GINT_TO_POINTER(pt->payload_type)); - if (rs) - continue; - - rs = bufferpool_alloc0(shm_bufferpool, sizeof(*rs)); - rs->payload_type = pt->payload_type; - rs->clock_rate = pt->clock_rate; - g_hash_table_insert(dst, GINT_TO_POINTER(rs->payload_type), rs); - } + while (t_hash_table_iter_next(&iter, NULL, &pt)) + rtp_stats_add_pt(dst, pt); /* we leave previously added but now removed payload types in place */ }