diff --git a/daemon/codec.c b/daemon/codec.c index bd7ddc72c..380fc832f 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -1689,7 +1689,8 @@ void codec_add_raw_packet(struct media_packet *mp) { p->s = mp->raw; p->free_func = NULL; if (mp->rtp && mp->ssrc_out) { - p->ssrc_out = ssrc_ctx_get(mp->ssrc_out); + ssrc_ctx_hold(mp->ssrc_out); + p->ssrc_out = mp->ssrc_out; p->rtp = mp->rtp; } g_queue_push_tail(&mp->packets_out, p); @@ -1882,7 +1883,8 @@ static void __output_rtp(struct media_packet *mp, struct codec_ssrc_handler *ch, p->ttq_entry.source = handler; p->rtp = rh; p->ts = ts; - p->ssrc_out = ssrc_ctx_get(ssrc_out); + ssrc_ctx_hold(ssrc_out); + p->ssrc_out = ssrc_out; // this packet is dynamically allocated, so we're able to schedule it. // determine scheduled time to send diff --git a/daemon/control_ng.c b/daemon/control_ng.c index b6807bf39..7d1420ed5 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -142,7 +142,7 @@ static void __ng_buffer_free(void *p) { struct ng_buffer *ngbuf = p; bencode_buffer_free(&ngbuf->buffer); if (ngbuf->ref) - __obj_put(ngbuf->ref); + obj_put_o(ngbuf->ref); } int control_ng_process(str *buf, const endpoint_t *sin, char *addr, @@ -170,7 +170,7 @@ int control_ng_process(str *buf, const endpoint_t *sin, char *addr, mutex_init(&ngbuf->lock); mutex_lock(&ngbuf->lock); if (ref) - ngbuf->ref = __obj_get(ref); // hold until we're done + ngbuf->ref = obj_get_o(ref); // hold until we're done int ret = bencode_buffer_init(&ngbuf->buffer); assert(ret == 0); diff --git a/daemon/rtcp.c b/daemon/rtcp.c index 8580341c2..3b010479b 100644 --- a/daemon/rtcp.c +++ b/daemon/rtcp.c @@ -1543,7 +1543,8 @@ void rtcp_receiver_reports(GQueue *out, struct ssrc_hash *hash, struct call_mono if (!atomic64_get(&i->packets)) continue; - g_queue_push_tail(out, ssrc_ctx_get(i)); + ssrc_ctx_hold(i); + g_queue_push_tail(out, i); } rwlock_unlock_r(&hash->lock); } diff --git a/include/ssrc.h b/include/ssrc.h index d4304de69..e1c4dd741 100644 --- a/include/ssrc.h +++ b/include/ssrc.h @@ -213,21 +213,18 @@ void payload_tracker_init(struct payload_tracker *t); void payload_tracker_add(struct payload_tracker *, int); -INLINE void ssrc_ctx_put(struct ssrc_ctx **c) { - if (!c || !*c) - return; - obj_put(&(*c)->parent->h); - *c = NULL; -} -INLINE struct ssrc_ctx *ssrc_ctx_get(struct ssrc_ctx *c) { - if (!c) - return NULL; - obj_hold(&c->parent->h); - return c; -} -INLINE void ssrc_ctx_hold(struct ssrc_ctx *c) { - ssrc_ctx_get(c); -} +#define ssrc_ctx_put(c) \ + do { \ + if ((c) && *(c)) { \ + obj_put(&(*c)->parent->h); \ + *(c) = NULL; \ + } \ + } while (0) +#define ssrc_ctx_hold(c) \ + do { \ + if ((c)) \ + obj_hold(&(c)->parent->h); \ + } while (0)