test: drop racy queued_bytes==0 assert in byte-budget test
CI / lint (push) Successful in 25s
CI / sanitizers (address) (push) Successful in 40s
CI / sanitizers (undefined) (push) Successful in 40s
CI / fuzz-build (push) Successful in 17s
CI / coverage (push) Successful in 34s
CI / valgrind (push) Successful in 36s
CI / build-and-test (push) Successful in 3m6s
CI / lint (push) Successful in 25s
CI / sanitizers (address) (push) Successful in 40s
CI / sanitizers (undefined) (push) Successful in 40s
CI / fuzz-build (push) Successful in 17s
CI / coverage (push) Successful in 34s
CI / valgrind (push) Successful in 36s
CI / build-and-test (push) Successful in 3m6s
After the writer releases bytes, the blocked enqueuer may already have admitted the next payload, so the transient queued_bytes==0 read is scheduling-dependent (lost the race under ASan). The post-join state (covers unblocking + budget re-limit) is deterministic.
This commit is contained in:
@@ -309,13 +309,14 @@ static void test_receiver_enqueue_byte_budget() {
|
|||||||
EXPECT_FALSE(atomic_load(&done));
|
EXPECT_FALSE(atomic_load(&done));
|
||||||
EXPECT_EQ_INT((int)ctx->queued_bytes, 2000); /* budget still honored */
|
EXPECT_EQ_INT((int)ctx->queued_bytes, 2000); /* budget still honored */
|
||||||
|
|
||||||
/* Simulate the disk writer: dequeue + destroy + release the first file. */
|
/* Simulate the disk writer: dequeue + destroy + release the first file.
|
||||||
|
Releasing bytes unblocks the waiting enqueuer, which then admits the
|
||||||
|
second payload, so only the post-join state (below) is deterministic. */
|
||||||
File* drained = queue_dequeue_multithreaded(q, &ctx->mutex, &ctx->condition_not_empty,
|
File* drained = queue_dequeue_multithreaded(q, &ctx->mutex, &ctx->condition_not_empty,
|
||||||
&ctx->condition_not_full, &ctx->receiver_done);
|
&ctx->condition_not_full, &ctx->receiver_done);
|
||||||
EXPECT_NOT_NULL(drained);
|
EXPECT_NOT_NULL(drained);
|
||||||
file_destroy(drained);
|
file_destroy(drained);
|
||||||
pipeline_context_receiver_note_bytes_released(ctx, 2000);
|
pipeline_context_receiver_note_bytes_released(ctx, 2000);
|
||||||
EXPECT_EQ_INT((int)ctx->queued_bytes, 0);
|
|
||||||
|
|
||||||
EXPECT_EQ_INT(thrd_join(enqueuer, NULL), thrd_success);
|
EXPECT_EQ_INT(thrd_join(enqueuer, NULL), thrd_success);
|
||||||
EXPECT_TRUE(atomic_load(&done));
|
EXPECT_TRUE(atomic_load(&done));
|
||||||
|
|||||||
Reference in New Issue
Block a user