diff options
author | Matthew Heon <matthew.heon@gmail.com> | 2018-04-27 16:06:02 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2019-01-04 09:45:59 -0500 |
commit | 27cebb780be4142afe6356cbbc57775a33e8e55e (patch) | |
tree | bdca2e5f96f7ff64c3e4cf9c8c46383a230dc9a8 /libpod/lock/shm_lock.h | |
parent | 6868b5aa1444404113bc6a4582203fbbf89490c2 (diff) | |
download | podman-27cebb780be4142afe6356cbbc57775a33e8e55e.tar.gz podman-27cebb780be4142afe6356cbbc57775a33e8e55e.tar.bz2 podman-27cebb780be4142afe6356cbbc57775a33e8e55e.zip |
Initial skeleton of in-memory locks
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
Diffstat (limited to 'libpod/lock/shm_lock.h')
-rw-r--r-- | libpod/lock/shm_lock.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/libpod/lock/shm_lock.h b/libpod/lock/shm_lock.h new file mode 100644 index 000000000..6988789dd --- /dev/null +++ b/libpod/lock/shm_lock.h @@ -0,0 +1,43 @@ +#ifndef shm_locks_h_ +#define shm_locks_h_ + +#include <semaphore.h> +#include <stdint.h> + +// Magic number to ensure we open the right SHM segment +#define MAGIC 0xA5A5 + +// Name of the SHM +#define SHM_NAME "/libpod_lock" + +// Type for our bitmaps +typedef uint32_t bitmap_t; + +// bitmap size +#define BITMAP_SIZE (sizeof(bitmap_t) * 8) + +// Struct to hold a single bitmap and associated locks +typedef struct lock_group { + bitmap_t bitmap; + sem_t locks[BITMAP_SIZE]; +} lock_group_t; + +// Struct to hold our SHM locks +typedef struct shm_struct { + uint16_t magic; + sem_t segment_lock; + uint32_t num_bitmaps; + uint32_t num_locks; + lock_group_t locks[]; +} shm_struct_t; + +size_t compute_shm_size(uint32_t num_bitmaps); +shm_struct_t *setup_lock_shm(uint32_t num_locks); +shm_struct_t *open_lock_shm(uint32_t num_locks); +int32_t close_lock_shm(shm_struct_t *shm); +int64_t allocate_semaphore(shm_struct_t *shm); +int32_t deallocate_semaphore(shm_struct_t *shm, uint32_t sem_index); +int32_t lock_semaphore(shm_struct_t *shm, uint32_t sem_index); +int32_t unlock_semaphore(shm_struct_t *shm, uint32_t sem_index); + +#endif |