TT#136952 allow passing user data to ssrc_hash_foreach

Change-Id: Iea158f06901de33ad9b53f8c277011b859cb214a
mika/coverity
Richard Fuchs 4 years ago
parent 4f705362e9
commit bcb912bc27

@ -191,7 +191,7 @@ static codec_handler_func handler_func_t38;
static struct ssrc_entry *__ssrc_handler_transcode_new(void *p);
static struct ssrc_entry *__ssrc_handler_new(void *p);
static void __ssrc_handler_stop(void *p);
static void __ssrc_handler_stop(void *p, void *dummy);
static void __free_ssrc_handler(void *);
INLINE struct codec_handler *codec_handler_lookup(GHashTable *ht, int pt, struct call_media *sink);
@ -226,10 +226,9 @@ static struct codec_handler codec_handler_stub_ssrc = {
static void __handler_shutdown(struct codec_handler *handler) {
if (handler->ssrc_hash) {
ssrc_hash_foreach(handler->ssrc_hash, __ssrc_handler_stop);
ssrc_hash_foreach(handler->ssrc_hash, __ssrc_handler_stop, NULL);
free_ssrc_hash(&handler->ssrc_hash);
}
if (handler->ssrc_handler)
obj_put(&handler->ssrc_handler->h);
handler->ssrc_handler = NULL;
@ -2471,7 +2470,7 @@ static void __dtx_setup(struct codec_ssrc_handler *ch) {
dtx->clockrate = ch->handler->source_pt.clock_rate;
dtx->tspp = dtx->ptime * dtx->clockrate / 1000;
}
static void __ssrc_handler_stop(void *p) {
static void __ssrc_handler_stop(void *p, void *dummy) {
struct codec_ssrc_handler *ch = p;
if (ch->dtx_buffer) {
mutex_lock(&ch->dtx_buffer->lock);
@ -2484,8 +2483,7 @@ static void __ssrc_handler_stop(void *p) {
void codec_handlers_stop(GQueue *q) {
for (GList *l = q->head; l; l = l->next) {
struct codec_handler *h = l->data;
if (h->ssrc_hash)
ssrc_hash_foreach(h->ssrc_hash, __ssrc_handler_stop);
ssrc_hash_foreach(h->ssrc_hash, __ssrc_handler_stop, NULL);
}
}

@ -186,13 +186,16 @@ void free_ssrc_hash(struct ssrc_hash **ht) {
g_slice_free1(sizeof(**ht), *ht);
*ht = NULL;
}
void ssrc_hash_foreach(struct ssrc_hash *sh, void (*f)(void *)) {
void ssrc_hash_foreach(struct ssrc_hash *sh, void (*f)(void *, void *), void *ptr) {
if (!sh)
return;
rwlock_lock_w(&sh->lock);
for (GList *k = sh->q.head; k; k = k->next)
f(k->data);
f(k->data, ptr);
if (sh->precreat)
f(sh->precreat);
f(sh->precreat, ptr);
rwlock_unlock_w(&sh->lock);
}

@ -206,7 +206,7 @@ struct ssrc_xr_voip_metrics {
void free_ssrc_hash(struct ssrc_hash **);
void ssrc_hash_foreach(struct ssrc_hash *, void (*)(void *));
void ssrc_hash_foreach(struct ssrc_hash *, void (*)(void *, void *), void *);
struct ssrc_hash *create_ssrc_hash_full(ssrc_create_func_t, void *uptr);
struct ssrc_hash *create_ssrc_hash_call(void);

Loading…
Cancel
Save