static void callids_2_sdps_timeout(struct timeval const *now) { PTHREAD_ASSERT_LOCK(&callids_2_sdps_mutex.mutex); struct callid_2_sdp *c2s; while (NULL != (c2s = TAILQ_FIRST(&callids_2_sdps_used))) { if (likely_(timeval_sub(now, &c2s->last_used) <= CALLID_TIMEOUT * 1000000LL)) break; SLOG(LOG_DEBUG, "Timeouting callid_2_sdp@%p for callid '%s'", c2s, c2s->call_id); callid_2_sdp_del(c2s); } }
/*! * Adjust the length prefix of the part by the provided delta to reflect the * current length of the part, and return the (possibly) adjusted delta. * * \param[in,out] part Part * \param[in,out] delta Delta * \return Error code */ static pb_error_t adjust_prefix(pb_part_t *part, ptrdiff_t *delta) { assert(part && part->offset.diff.length); assert(pb_part_valid(part) && pb_part_aligned(part)); pb_error_t error = PB_ERROR_NONE; /* Write new length prefix to binary */ uint32_t bytes = pb_part_size(part); pb_binary_buffer_t buffer = pb_binary_buffer_create(); if (!(error = pb_binary_buffer_write_varint32(&buffer, &bytes))) { ptrdiff_t adjust = pb_binary_buffer_size(&buffer) + part->offset.diff.length; if (likely_(!adjust)) { error = pb_binary_write(part->binary, part->offset.start + part->offset.diff.length, part->offset.start, pb_binary_buffer_data(&buffer), pb_binary_buffer_size(&buffer)); /* Length of length prefix changed */ } else { pb_journal_t *journal = pb_binary_journal(part->binary); assert(journal); /* Write new length prefix to binary and perform manual alignment */ pb_error_t error = pb_journal_log(journal, part->offset.start + part->offset.diff.length, part->offset.start, adjust); if (!error) { error = pb_binary_write(part->binary, part->offset.start + part->offset.diff.length, part->offset.start, pb_binary_buffer_data(&buffer), pb_binary_buffer_size(&buffer)); if (unlikely_(error)) { pb_journal_revert(journal); /* LCOV_EXCL_LINE */ /* Update offsets */ } else { /* LCOV_EXCL_LINE */ part->version++; part->offset.start += adjust; part->offset.end += adjust; part->offset.diff.origin -= adjust; part->offset.diff.tag -= adjust; part->offset.diff.length -= adjust; /* Adjust delta for subsequent updates */ *delta += adjust; } } } } pb_binary_buffer_destroy(&buffer); return error; }