[Xquartz-changes] [239] AppleSGLX/trunk/tests
source_changes at macosforge.org
source_changes at macosforge.org
Sun Feb 22 15:07:00 PST 2009
Revision: 239
http://trac.macosforge.org/projects/xquartz/changeset/239
Author: gstaplin at apple.com
Date: 2009-02-22 15:06:59 -0800 (Sun, 22 Feb 2009)
Log Message:
-----------
This commit adds the mmap shared mapping tests I wrote.
These were used to test the validity of the GLXPixmap design.
We may end up using a similar pattern for other things like
shared X11 and OpenGL rendering to windows, to fix the mixed
X11 raster and OpenGL rendering problem.
Added Paths:
-----------
AppleSGLX/trunk/tests/shared_mapping/
AppleSGLX/trunk/tests/shared_mapping/NOTES
AppleSGLX/trunk/tests/shared_mapping/bld.sh
AppleSGLX/trunk/tests/shared_mapping/clean.sh
AppleSGLX/trunk/tests/shared_mapping/client.c
AppleSGLX/trunk/tests/shared_mapping/server.c
Added: AppleSGLX/trunk/tests/shared_mapping/NOTES
===================================================================
--- AppleSGLX/trunk/tests/shared_mapping/NOTES (rev 0)
+++ AppleSGLX/trunk/tests/shared_mapping/NOTES 2009-02-22 23:06:59 UTC (rev 239)
@@ -0,0 +1,8 @@
+The client and server programs are protypes to test the behavior
+of GLXPixmap shared memory in a controlled environment
+
+The client faults after munmapping and truncating its fd, but the
+server keeps going. This is a good thing from a security perspective.
+
+The client sees the servers changes, and the server can see the
+client changes, but the server won't fault if the file is truncated.
Added: AppleSGLX/trunk/tests/shared_mapping/bld.sh
===================================================================
--- AppleSGLX/trunk/tests/shared_mapping/bld.sh (rev 0)
+++ AppleSGLX/trunk/tests/shared_mapping/bld.sh 2009-02-22 23:06:59 UTC (rev 239)
@@ -0,0 +1,2 @@
+gcc client.c -o client
+gcc server.c -o server
Added: AppleSGLX/trunk/tests/shared_mapping/clean.sh
===================================================================
--- AppleSGLX/trunk/tests/shared_mapping/clean.sh (rev 0)
+++ AppleSGLX/trunk/tests/shared_mapping/clean.sh 2009-02-22 23:06:59 UTC (rev 239)
@@ -0,0 +1 @@
+rm -f client server *~
Added: AppleSGLX/trunk/tests/shared_mapping/client.c
===================================================================
--- AppleSGLX/trunk/tests/shared_mapping/client.c (rev 0)
+++ AppleSGLX/trunk/tests/shared_mapping/client.c 2009-02-22 23:06:59 UTC (rev 239)
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int main(int argc, char *argv[]) {
+ int fd;
+ size_t length;
+ void *buffer;
+
+ fd = shm_open("FOOBAR", O_RDWR, 0);
+
+ if(-1 == fd) {
+ perror("shm_open");
+ return EXIT_FAILURE;
+ }
+
+
+ length = sysconf(_SC_PAGESIZE) * 2;
+
+ buffer = mmap(NULL, length,
+ PROT_READ | PROT_WRITE,
+ MAP_FILE | MAP_SHARED, fd, 0);
+
+ if(MAP_FAILED == buffer) {
+ perror("mmap");
+ shm_unlink("FOOBAR");
+ close(fd);
+ return EXIT_FAILURE;
+ }
+
+ while(1) {
+ unsigned char *cp, *cplimit;
+
+ cp = buffer;
+ cplimit = cp + length;
+
+ while(cp < cplimit) {
+ printf("cp %x\n", *cp);
+ ++cp;
+ }
+
+ if(-1 == munmap(buffer, length))
+ perror("munmap");
+
+ if(-1 == ftruncate(fd, 10))
+ perror("ftruncate");
+ }
+
+
+ return EXIT_SUCCESS;
+}
Added: AppleSGLX/trunk/tests/shared_mapping/server.c
===================================================================
--- AppleSGLX/trunk/tests/shared_mapping/server.c (rev 0)
+++ AppleSGLX/trunk/tests/shared_mapping/server.c 2009-02-22 23:06:59 UTC (rev 239)
@@ -0,0 +1,63 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int main(int argc, char *argv[]) {
+ int fd;
+ size_t length;
+ void *buffer;
+ int b;
+
+ shm_unlink("FOOBAR");
+
+ fd = shm_open("FOOBAR", O_RDWR | O_EXCL | O_CREAT,
+ S_IRUSR | S_IWUSR | S_IROTH | S_IWOTH);
+
+ if(-1 == fd) {
+ perror("shm_open");
+ return EXIT_FAILURE;
+ }
+
+
+ length = sysconf(_SC_PAGESIZE) * 2;
+
+ if(-1 == ftruncate(fd, length)) {
+ perror("ftruncate");
+ shm_unlink("FOOBAR");
+ close(fd);
+ return EXIT_FAILURE;
+ }
+
+ printf("length %zu\n", length);
+
+ buffer = mmap(NULL, length,
+ PROT_READ | PROT_WRITE,
+ MAP_FILE | MAP_SHARED, fd, 0);
+
+ if(MAP_FAILED == buffer) {
+ perror("mmap");
+ shm_unlink("FOOBAR");
+ close(fd);
+ return EXIT_FAILURE;
+ }
+
+ b = 0;
+ while(1) {
+ printf("b %d\n", b);
+
+ memset(buffer, b, length);
+ ++b;
+
+ if(b > 255)
+ b = 0;
+
+ sleep(1);
+ }
+
+
+ return EXIT_SUCCESS;
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/xquartz-changes/attachments/20090222/da734216/attachment.html>
More information about the Xquartz-changes
mailing list