Commit: d49dcdf55714cc86063d211aa80d0ee7c541b153
Parent: df714e2b837723fe2fbb51c8d2e56a7c22d3b318
Author: Randy Palamar
Date: Sun, 11 Aug 2024 14:39:08 -0600
actually map the same page in the input ring buffer
Diffstat:
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/os_unix.c b/os_unix.c
@@ -108,6 +108,15 @@ os_alloc_ring_buffer(RingBuf *rb, size capacity)
if (capacity % pagesize != 0)
capacity += pagesize - capacity % pagesize;
+ ASSERT(capacity % pagesize == 0);
+
+ char *mfd_name = "vtgl:rb";
+ i32 fd = shm_open(mfd_name, O_RDWR|O_CREAT, 0600);
+ if (fd == -1)
+ die("os_alloc_ring_buffer: failed to open mem_fd\n");
+ shm_unlink(mfd_name);
+ ftruncate(fd, capacity);
+
rb->widx = 0;
rb->filled = 0;
rb->cap = capacity;
@@ -118,10 +127,12 @@ os_alloc_ring_buffer(RingBuf *rb, size capacity)
for (i32 i = 0; i < 3; i++) {
void *ret = mmap(rb->buf + i * rb->cap, rb->cap, PROT_READ|PROT_WRITE,
- MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE, -1, 0);
+ MAP_FIXED|MAP_SHARED, fd, 0);
if (ret == MAP_FAILED)
die("os_alloc_ring_buffer: mmap(%d) failed\n", i);
}
+ close(fd);
+
/* NOTE: start in the middle page */
rb->buf += rb->cap;
}