vtgl

terminal emulator implemented in OpenGL
git clone anongit@rnpnr.xyz:vtgl.git
Log | Files | Refs | Feed | LICENSE

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:
Mos_unix.c | 13++++++++++++-
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; }