mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
shmem: whitespace cleanup
I like a bit more whitespace for readability
This commit is contained in:
parent
3d84956b9e
commit
86bddfa83a
4 changed files with 39 additions and 19 deletions
|
@ -40,11 +40,11 @@
|
|||
* @see node_type
|
||||
*/
|
||||
struct shmem {
|
||||
const char* out_name; /**< Name of the shm object for the output queue. */
|
||||
const char* in_name; /**< Name of the shm object for the input queue. */
|
||||
struct shmem_conf conf; /**< Interface configuration struct. */
|
||||
char **exec; /**< External program to execute on start. */
|
||||
struct shmem_int intf; /**< Shmem interface */
|
||||
const char* out_name; /**< Name of the shm object for the output queue. */
|
||||
const char* in_name; /**< Name of the shm object for the input queue. */
|
||||
struct shmem_conf conf; /**< Interface configuration struct. */
|
||||
char **exec; /**< External program to execute on start. */
|
||||
struct shmem_int intf; /**< Shmem interface */
|
||||
};
|
||||
|
||||
/** @see node_type::print */
|
||||
|
|
|
@ -52,26 +52,24 @@ union shmem_queue {
|
|||
/** Struct containing all parameters that need to be known when creating a new
|
||||
* shared memory object. */
|
||||
struct shmem_conf {
|
||||
int polling; /**< Whether to use polling instead of POSIX CVs */
|
||||
int queuelen; /**< Size of the queues (in elements) */
|
||||
int samplelen; /**< Maximum number of data entries in a single sample */
|
||||
int polling; /**< Whether to use polling instead of POSIX CVs */
|
||||
int queuelen; /**< Size of the queues (in elements) */
|
||||
int samplelen; /**< Maximum number of data entries in a single sample */
|
||||
};
|
||||
|
||||
/** The structure that actually resides in the shared memory. */
|
||||
struct shmem_shared {
|
||||
int polling; /**< Whether to use a pthread_cond_t to signal if new samples are written to incoming queue. */
|
||||
|
||||
union shmem_queue queue; /**< Queues for samples passed in both directions. */
|
||||
|
||||
struct pool pool; /**< Pool for the samples in the queues. */
|
||||
int polling; /**< Whether to use a pthread_cond_t to signal if new samples are written to incoming queue. */
|
||||
union shmem_queue queue; /**< Queues for samples passed in both directions. */
|
||||
struct pool pool; /**< Pool for the samples in the queues. */
|
||||
};
|
||||
|
||||
/** Relevant information for one direction of the interface. */
|
||||
struct shmem_dir {
|
||||
void *base; /**< Base address of the region. */
|
||||
const char *name; /**< Name of the shmem object. */
|
||||
size_t len; /**< Total size of the region. */
|
||||
struct shmem_shared *shared; /**< Actually shared datastructure */
|
||||
void *base; /**< Base address of the region. */
|
||||
const char *name; /**< Name of the shmem object. */
|
||||
size_t len; /**< Total size of the region. */
|
||||
struct shmem_shared *shared; /**< Actually shared datastructure */
|
||||
};
|
||||
|
||||
/** Main structure representing the shared memory interface. */
|
||||
|
@ -81,6 +79,7 @@ struct shmem_int {
|
|||
|
||||
/** Open the shared memory objects and retrieve / initialize the shared data structures.
|
||||
* Blocks until another process connects by opening the same objects.
|
||||
*
|
||||
* @param[in] wname Name of the POSIX shared memory object containing the output queue.
|
||||
* @param[in] rname Name of the POSIX shared memory object containing the input queue.
|
||||
* @param[inout] shm The shmem_int structure that should be used for following
|
||||
|
@ -92,6 +91,7 @@ struct shmem_int {
|
|||
int shmem_int_open(const char* wname, const char* rname, struct shmem_int* shm, struct shmem_conf* conf);
|
||||
|
||||
/** Close and destroy the shared memory interface and related structures.
|
||||
*
|
||||
* @param shm The shared memory interface.
|
||||
* @retval 0 Closing successfull.
|
||||
* @retval <0 An error occurred; errno is set appropiately.
|
||||
|
@ -99,6 +99,7 @@ int shmem_int_open(const char* wname, const char* rname, struct shmem_int* shm,
|
|||
int shmem_int_close(struct shmem_int *shm);
|
||||
|
||||
/** Read samples from the interface.
|
||||
*
|
||||
* @param shm The shared memory interface.
|
||||
* @param smps An array where the pointers to the samples will be written. The samples
|
||||
* must be freed with sample_put after use.
|
||||
|
@ -109,6 +110,7 @@ int shmem_int_close(struct shmem_int *shm);
|
|||
int shmem_int_read(struct shmem_int *shm, struct sample *smps[], unsigned cnt);
|
||||
|
||||
/** Write samples to the interface.
|
||||
*
|
||||
* @param shm The shared memory interface.
|
||||
* @param smps The samples to be written. Must be allocated from shm_int_alloc.
|
||||
* @param cnt Number of samples to write.
|
||||
|
@ -118,6 +120,7 @@ int shmem_int_read(struct shmem_int *shm, struct sample *smps[], unsigned cnt);
|
|||
int shmem_int_write(struct shmem_int *shm, struct sample *smps[], unsigned cnt);
|
||||
|
||||
/** Allocate samples to be written to the interface. The writing process must
|
||||
*
|
||||
* not free the samples; only the receiving process should free them using
|
||||
* sample_put after use.
|
||||
* @param shm The shared memory interface.
|
||||
|
|
|
@ -42,12 +42,16 @@ int shmem_parse(struct node *n, config_setting_t *cfg)
|
|||
|
||||
if (!config_setting_lookup_string(cfg, "out_name", &shm->out_name))
|
||||
cerror(cfg, "Missing shared memory output queue name");
|
||||
|
||||
if (!config_setting_lookup_string(cfg, "in_name", &shm->in_name))
|
||||
cerror(cfg, "Missing shared memory input queue name");
|
||||
|
||||
if (!config_setting_lookup_int(cfg, "queuelen", &shm->conf.queuelen))
|
||||
shm->conf.queuelen = DEFAULT_SHMEM_QUEUELEN;
|
||||
|
||||
if (!config_setting_lookup_int(cfg, "samplelen", &shm->conf.samplelen))
|
||||
shm->conf.samplelen = DEFAULT_SHMEM_SAMPLELEN;
|
||||
|
||||
if (!config_setting_lookup_bool(cfg, "polling", &shm->conf.polling))
|
||||
shm->conf.polling = false;
|
||||
|
||||
|
@ -111,14 +115,18 @@ int shmem_read(struct node *n, struct sample *smps[], unsigned cnt)
|
|||
/* This can only really mean that the other process has exited, so close
|
||||
* the interface to make sure the shared memory object is unlinked */
|
||||
shmem_int_close(&shm->intf);
|
||||
|
||||
if (recv <= 0)
|
||||
return recv;
|
||||
|
||||
sample_copy_many(smps, shared_smps, recv);
|
||||
sample_put_many(shared_smps, recv);
|
||||
|
||||
struct timespec ts_recv = time_now();
|
||||
|
||||
for (int i = 0; i < recv; i++)
|
||||
smps[i]->ts.received = ts_recv;
|
||||
|
||||
return recv;
|
||||
}
|
||||
|
||||
|
|
13
lib/shmem.c
13
lib/shmem.c
|
@ -64,6 +64,7 @@ int shmem_int_open(const char *wname, const char* rname, struct shmem_int *shm,
|
|||
sem_own = sem_open(wname, O_CREAT, 0600, 0);
|
||||
if (sem_own == SEM_FAILED)
|
||||
return -1;
|
||||
|
||||
sem_other = sem_open(rname, O_CREAT, 0600, 0);
|
||||
if (sem_other == SEM_FAILED)
|
||||
return -1;
|
||||
|
@ -72,12 +73,15 @@ int shmem_int_open(const char *wname, const char* rname, struct shmem_int *shm,
|
|||
fd = shm_open(wname, O_RDWR|O_CREAT|O_EXCL, 0600);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
len = shmem_total_size(conf->queuelen, conf->queuelen, conf->samplelen);
|
||||
if (ftruncate(fd, len) < 0)
|
||||
return -1;
|
||||
|
||||
base = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
if (base == MAP_FAILED)
|
||||
return -1;
|
||||
|
||||
close(fd);
|
||||
|
||||
manager = memtype_managed_init(base, len);
|
||||
|
@ -117,10 +121,13 @@ int shmem_int_open(const char *wname, const char* rname, struct shmem_int *shm,
|
|||
fd = shm_open(rname, O_RDWR, 0);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
if (fstat(fd, &stat_buf) < 0)
|
||||
return -1;
|
||||
|
||||
len = stat_buf.st_size;
|
||||
base = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
|
||||
if (base == MAP_FAILED)
|
||||
return -1;
|
||||
|
||||
|
@ -133,6 +140,7 @@ int shmem_int_open(const char *wname, const char* rname, struct shmem_int *shm,
|
|||
|
||||
/* Unlink the semaphores; we don't need them anymore */
|
||||
sem_unlink(wname);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -146,17 +154,18 @@ int shmem_int_close(struct shmem_int *shm)
|
|||
munmap(shm->read.base, shm->read.len);
|
||||
munmap(shm->write.base, shm->write.len);
|
||||
shm_unlink(shm->write.name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int shmem_int_read(struct shmem_int *shm, struct sample *smps[], unsigned cnt)
|
||||
{
|
||||
return shm->read.shared->polling ? queue_pull_many(&shm->read.shared->queue.q, (void **) smps, cnt)
|
||||
: queue_signalled_pull_many(&shm->read.shared->queue.qs, (void **) smps, cnt);
|
||||
: queue_signalled_pull_many(&shm->read.shared->queue.qs, (void **) smps, cnt);
|
||||
}
|
||||
|
||||
int shmem_int_write(struct shmem_int *shm, struct sample *smps[], unsigned cnt)
|
||||
{
|
||||
return shm->write.shared->polling ? queue_push_many(&shm->write.shared->queue.q, (void **) smps, cnt)
|
||||
: queue_signalled_push_many(&shm->write.shared->queue.qs, (void **) smps, cnt);
|
||||
: queue_signalled_push_many(&shm->write.shared->queue.qs, (void **) smps, cnt);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue