static void process_delete(session_t *sp, rtp_event *e) { if (log_fp != 0) { struct timeval tv, *dead; int d_sec = -1, d_usec = -1; gettimeofday(&tv, 0); dead = (struct timeval *) e->data; if (dead != 0) { d_sec = (int) dead->tv_sec; d_usec = (int) dead->tv_usec; } fprintf(log_fp, "%d.%06d %d delete %x %d.%06d\n", (int) tv.tv_sec, (int) tv.tv_usec, rtp_get_ssrc_count(sp->rtp_session[0]), e->ssrc, d_sec, d_usec); fflush(log_fp); } if (e->ssrc != rtp_my_ssrc(sp->rtp_session[0]) && sp->mbus_engine != NULL) { struct s_source *s; pdb_entry_t *pdbe; if ((s = source_get_by_ssrc(sp->active_sources, e->ssrc)) != NULL) { source_remove(sp->active_sources, s); } if (pdb_item_get(sp->pdb, e->ssrc, &pdbe)) { pdb_item_destroy(sp->pdb, e->ssrc); /* Will not be in ui if not in pdb */ ui_send_rtp_remove(sp, sp->mbus_ui_addr, e->ssrc); } } }
int pdb_destroy(pdb_t **pp) { pdb_t *p = *pp; uint32_t id; while(pdb_get_first_id(p, &id)) { if (pdb_item_destroy(p, id) == FALSE) { debug_msg("Failed to destroy item\n"); return FALSE; } } if (btree_destroy(&p->db) == FALSE) { debug_msg("Failed to destroy tree\n"); return FALSE; } xfree(p); *pp = NULL; return TRUE; }