コード例 #1
0
ファイル: sip.c プロジェクト: rixed/junkie
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);
    }
}
コード例 #2
0
ファイル: part.c プロジェクト: zhangjinde/protobluff
/*!
 * 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;
}