Skip to content

Commit

Permalink
Also store forwarded struct in shared memory object
Browse files Browse the repository at this point in the history
Signed-off-by: DL6ER <dl6er@dl6er.de>
  • Loading branch information
DL6ER committed Aug 2, 2018
1 parent 249d236 commit 584c23d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
9 changes: 2 additions & 7 deletions memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,8 @@ void memory_check(int which)
case FORWARDED:
if(counters.forwarded >= counters.forwarded_MAX)
{
// Have to reallocate memory
counters.forwarded_MAX += FORWARDEDALLOCSTEP;
logg_struct_resize("forwarded",counters.forwarded_MAX,FORWARDEDALLOCSTEP);
forwarded = realloc(forwarded, counters.forwarded_MAX*sizeof(forwardedDataStruct));
// Have to reallocate shared memory
clients = enlarge_shmem_struct('f');

This comment has been minimized.

Copy link
@AzureMarker

AzureMarker Aug 3, 2018

Contributor

clients should be forwarded

This comment has been minimized.

Copy link
@DL6ER

DL6ER Aug 3, 2018

Author Member

Thanks. I have already found but forgot to push this. As the magic byte wasn't correctly aligned, the error revealed itself pretty quickly by messages generated by my memory checking algorithm.

if(forwarded == NULL)
{
logg("FATAL: Memory allocation failed! Exiting");
Expand All @@ -80,7 +78,6 @@ void memory_check(int which)
{
// Have to reallocate shared memory
clients = enlarge_shmem_struct('c');
logg_struct_resize("clients", counters.clients_MAX, CLIENTSALLOCSTEP);
if(clients == NULL)
{
logg("FATAL: Memory allocation failed! Exiting");
Expand All @@ -93,8 +90,6 @@ void memory_check(int which)
{
// Have to reallocate shared memory
domains = enlarge_shmem_struct('d');
logg_struct_resize("clients", counters.domains_MAX, DOMAINSALLOCSTEP);

if(domains == NULL)
{
logg("FATAL: Memory allocation failed! Exiting");
Expand Down
24 changes: 19 additions & 5 deletions shmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@
#define SHARED_STRINGS_NAME "FTL-strings"
#define SHARED_DOMAINS_NAME "FTL-domains"
#define SHARED_CLIENTS_NAME "FTL-clients"
#define SHARED_FORWARDED_NAME "FTL-forwarded"

/// The pointer in shared memory to the shared string buffer
static SharedMemory shm_strings = { 0 };
static SharedMemory shm_domains = { 0 };
static SharedMemory shm_clients = { 0 };
static SharedMemory shm_forwarded = { 0 };

static int pagesize;
static unsigned int next_pos = 0;
Expand Down Expand Up @@ -69,7 +71,6 @@ bool init_shmem(void)
// If the object is still existing, e.g., due to a past unclean exit
// of FTL, shm_open() would fail with error "File exists"
shm_unlink(SHARED_STRINGS_NAME);

// Try to create shared memory object
shm_strings = create_shm(SHARED_STRINGS_NAME, pagesize);
if(shm_strings.ptr == NULL)
Expand All @@ -81,7 +82,6 @@ bool init_shmem(void)

/****************************** shared domains struct ******************************/
shm_unlink(SHARED_DOMAINS_NAME);

// Try to create shared memory object
shm_domains = create_shm(SHARED_DOMAINS_NAME, pagesize*sizeof(domainsDataStruct));
if(shm_domains.ptr == NULL)
Expand All @@ -91,14 +91,22 @@ bool init_shmem(void)

/****************************** shared clients struct ******************************/
shm_unlink(SHARED_CLIENTS_NAME);

// Try to create shared memory object
shm_clients = create_shm(SHARED_CLIENTS_NAME, pagesize*sizeof(clientsDataStruct));
if(shm_clients.ptr == NULL)
return false;
clients = (clientsDataStruct*)shm_clients.ptr;
counters.clients_MAX = pagesize;

/****************************** shared forwarded struct ******************************/
shm_unlink(SHARED_FORWARDED_NAME);
// Try to create shared memory object
shm_forwarded = create_shm(SHARED_FORWARDED_NAME, pagesize*sizeof(forwardedDataStruct));
if(shm_forwarded.ptr == NULL)
return false;
forwarded = (forwardedDataStruct*)shm_forwarded.ptr;
counters.forwarded_MAX = pagesize;

return true;
}

Expand Down Expand Up @@ -162,28 +170,34 @@ void *enlarge_shmem_struct(char type)
SharedMemory sharedMemory;
size_t sizeofobj;
int *counter;
char *typ;
switch(type)
{
case 'c':
typ = "clients";
sharedMemory = shm_clients;
sizeofobj = sizeof(clientsDataStruct);
counter = &counters.clients_MAX;
break;
case 'd':
typ = "domains";
sharedMemory = shm_domains;
sizeofobj = sizeof(domainsDataStruct);
counter = &counters.domains_MAX;
break;
/* case 'f':
case 'f':
typ = "forwarded";
sharedMemory = shm_forwarded;
sizeofobj = sizeof(forwardedDataStruct);
counter = &counters.forwarded_MAX;
break;*/
break;
default:
logg("Invalid argument in enlarge_shmem_struct(): %c (%i)", type, type);
return 0;
}

logg("Reallocating %s struct (increasing %zu by %zu)", typ, sharedMemory.size, pagesize*sizeofobj);

// Reallocate enough space for 4096 instances of requested object
realloc_shm(&sharedMemory, sharedMemory.size + pagesize*sizeofobj);

Expand Down

0 comments on commit 584c23d

Please sign in to comment.