Added the malloc_shared_memory() and calloc_shared_memory() function to
allow the use of shared memory between all the children.
This commit is contained in:
parent
63f481c61a
commit
2e6ab58f37
50
src/heap.c
50
src/heap.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: heap.c,v 1.1 2002-05-23 04:41:10 rjkaes Exp $
|
/* $Id: heap.c,v 1.2 2002-05-26 18:56:06 rjkaes Exp $
|
||||||
*
|
*
|
||||||
* Debugging versions of various heap related functions are combined
|
* Debugging versions of various heap related functions are combined
|
||||||
* here. The debugging versions include assertions and also print
|
* here. The debugging versions include assertions and also print
|
||||||
@ -90,3 +90,51 @@ debugging_strdup(const char* s, const char* file, unsigned long line)
|
|||||||
fprintf(stderr, "{strdup: %p:%u} %s:%lu\n", ptr, len, file, line);
|
fprintf(stderr, "{strdup: %p:%u} %s:%lu\n", ptr, len, file, line);
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate a block of memory in the "shared" memory region
|
||||||
|
*/
|
||||||
|
void*
|
||||||
|
malloc_shared_memory(size_t size)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
void* ptr;
|
||||||
|
|
||||||
|
assert(size > 0);
|
||||||
|
|
||||||
|
#ifdef MAP_ANON
|
||||||
|
ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
|
||||||
|
#else
|
||||||
|
fd = open("/dev/zero", O_RDWR, 0);
|
||||||
|
|
||||||
|
ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||||
|
close(fd);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate a block of memory from the "shared" region an initialize it to
|
||||||
|
* zero.
|
||||||
|
*/
|
||||||
|
void*
|
||||||
|
calloc_shared_memory(size_t nmemb, size_t size)
|
||||||
|
{
|
||||||
|
void* ptr;
|
||||||
|
long length;
|
||||||
|
|
||||||
|
assert(nmemb > 0);
|
||||||
|
assert(size > 0);
|
||||||
|
|
||||||
|
length = nmemb * size;
|
||||||
|
|
||||||
|
ptr = malloc_shared_memory(length);
|
||||||
|
if (!ptr)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
memset(ptr, 0, length);
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: heap.h,v 1.1 2002-05-23 04:41:10 rjkaes Exp $
|
/* $Id: heap.h,v 1.2 2002-05-26 18:56:06 rjkaes Exp $
|
||||||
*
|
*
|
||||||
* See 'heap.c' for a detailed description.
|
* See 'heap.c' for a detailed description.
|
||||||
*
|
*
|
||||||
@ -46,4 +46,10 @@ extern char *debugging_strdup(const char* s, const char* file,
|
|||||||
# define safestrdup(x) strdup(x)
|
# define safestrdup(x) strdup(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate memory from the "shared" region of memory.
|
||||||
|
*/
|
||||||
|
extern void* malloc_shared_memory(size_t size);
|
||||||
|
extern void* calloc_shared_memory(size_t nmemb, size_t size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user