X-Git-Url: https://eleni.mutantstargoat.com/git/?p=winnie;a=blobdiff_plain;f=src%2Fshalloc.cc;h=fd5809ebb6b07a3921386520555b3592805d31c9;hp=b5c155f63ab4b2a58909e1cc9997901f16d41015;hb=4c593fbf3f382ffca0c20b9d406e10228cc75da4;hpb=32869d8ffb64be82541f48166c5e73a6c4336135 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