Merge pull request #129 from eboasson/master

Writer throttling fixes + timeouts on Windows
This commit is contained in:
eboasson 2019-03-19 09:42:19 +01:00 committed by GitHub
commit 318968f40f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 4 deletions

View file

@ -950,7 +950,7 @@ static os_result throttle_writer (struct nn_xpack *xp, struct writer *wr)
nn_mtime_t tnow = now_mt ();
const nn_mtime_t abstimeout = add_duration_to_mtime (tnow, nn_from_ddsi_duration (wr->xqos->reliability.max_blocking_time));
struct whc_state whcst;
whc_get_state(wr->whc, &whcst);
whc_get_state (wr->whc, &whcst);
{
ASSERT_MUTEX_HELD (&wr->e.lock);
@ -960,7 +960,7 @@ static os_result throttle_writer (struct nn_xpack *xp, struct writer *wr)
}
DDS_LOG(DDS_LC_THROTTLE, "writer %x:%x:%x:%x waiting for whc to shrink below low-water mark (whc %"PRIuSIZE" low=%u high=%u)\n", PGUID (wr->e.guid), whcst.unacked_bytes, wr->whc_low, wr->whc_high);
wr->throttling = 1;
wr->throttling++;
wr->throttle_count++;
/* Force any outstanding packet out: there will be a heartbeat
@ -976,6 +976,7 @@ static os_result throttle_writer (struct nn_xpack *xp, struct writer *wr)
}
nn_xpack_send (xp, true);
os_mutexLock (&wr->e.lock);
whc_get_state (wr->whc, &whcst);
}
while (gv.rtps_keepgoing && !writer_may_continue (wr, &whcst))
@ -1000,7 +1001,7 @@ static os_result throttle_writer (struct nn_xpack *xp, struct writer *wr)
}
}
wr->throttling = 0;
wr->throttling--;
if (wr->state != WRST_OPERATIONAL)
{
/* gc_delete_writer may be waiting */

View file

@ -97,7 +97,7 @@ os_result os_condTimedWait(os_cond *cond, os_mutex *mutex, const os_time *time)
assert(cond != NULL);
assert(mutex != NULL);
timems = time->tv_sec * 1000 + (time->tv_nsec + 999999999) / 1000000;
timems = time->tv_sec * 1000 + (time->tv_nsec + 999999) / 1000000;
if (SleepConditionVariableSRW(&cond->cond, &mutex->lock, timems, 0)) {
return os_resultSuccess;
} else if (GetLastError() != ERROR_TIMEOUT) {