From 4c593fbf3f382ffca0c20b9d406e10228cc75da4 Mon Sep 17 00:00:00 2001 From: Eleni Maria Stea Date: Tue, 12 Mar 2013 02:32:27 +0200 Subject: [PATCH] added shared memory --- Makefile | 2 +- src/shalloc.cc | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 4242187..24b1989 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ endif CXX = g++ CXXFLAGS = -pedantic -Wall $(dbg) $(opt) $(inc) $(def) `freetype-config --cflags` -LDFLAGS = $(libs) `freetype-config --libs` +LDFLAGS = $(libs) `freetype-config --libs` -lrt $(bin): $(obj) $(CXX) -o $@ $(obj) $(LDFLAGS) diff --git a/src/shalloc.cc b/src/shalloc.cc index b5c155f..fd5809e 100644 --- a/src/shalloc.cc +++ b/src/shalloc.cc @@ -4,10 +4,18 @@ #include #include +#include +#include +#include +#include +#include + #include #include "shalloc.h" +#define SHMNAME "/winnie.shm" + #define POOL_SIZE 16777216 #define BLOCK_SIZE 512 @@ -21,6 +29,7 @@ static void alloc_blocks(int block_pos, int num_blocks); static void free_blocks(int block_pos, int num_blocks); static void print_stats(); +static int fd; static unsigned char *pool; static std::map alloc_sizes; //starting block -> number of blocks @@ -39,9 +48,23 @@ static Statistics stats; bool init_shared_memory() { - if(!(pool = (unsigned char *)malloc(POOL_SIZE))) { + if(((fd = shm_open(SHMNAME, O_RDWR | O_CREAT, S_IRWXU)) == -1)) { + fprintf(stderr, "Failed to open shared memory: %s\n", strerror(errno)); return false; } + ftruncate(fd, POOL_SIZE); + + if((pool = (unsigned char*)mmap(0, POOL_SIZE, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, 0)) == (void*)-1) { + fprintf(stderr, "Failed to map shared memory: %s\n", strerror(errno)); + } + + shm_unlink(SHMNAME); + + //TODO delete it + /*if(!(pool = (unsigned char *)malloc(POOL_SIZE))) { + return false; + }*/ for(int i=0; i