Skip to content

Commit 708fa47

Browse files
committed
sandlock-oci: publish test counter files atomically to deflake e2e reads
Signed-off-by: Cong Wang <cwang@multikernel.io>
1 parent 4585205 commit 708fa47

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

crates/sandlock-oci/tests/integration.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,6 @@ fn counter_source(out_path: &str) -> String {
214214
#define SYS_open 2
215215
#define SYS_nanosleep 35
216216
#define SYS_lseek 8
217-
#define SYS_ftruncate 77
218217
#define O_WRONLY 1
219218
#define O_CREAT 0100
220219
#define O_TRUNC 01000
@@ -230,12 +229,14 @@ void _start(void){{
230229
struct ts t; t.sec = 0; t.nsec = 20000000;
231230
for(;;){{
232231
i++;
233-
int p = 0; unsigned long v = i; char tmp[24]; int k=0;
234-
if(v==0){{ tmp[k++]='0'; }} while(v){{ tmp[k++]='0'+(v%10); v/=10; }}
235-
while(k>0){{ buf[p++]=tmp[--k]; }} buf[p++]='\n';
232+
// Publish the counter atomically: one fixed-width, zero-padded 21-byte
233+
// overwrite (20 digits + newline) at offset 0, never truncating. A reader
234+
// therefore always sees a complete, parseable value, never an empty file.
235+
unsigned long v = i; int d;
236+
for(d = 19; d >= 0; d--){{ buf[d] = '0' + (v % 10); v /= 10; }}
237+
buf[20] = '\n';
236238
sys3(SYS_lseek, fd, 0, 0);
237-
sys3(SYS_ftruncate, fd, 0, 0);
238-
sys3(SYS_write, fd, (long)buf, p);
239+
sys3(SYS_write, fd, (long)buf, 21);
239240
sys3(SYS_nanosleep, (long)&t, 0, 0);
240241
}}
241242
}}

0 commit comments

Comments
 (0)