diff options
author | dimitri staessens <[email protected]> | 2016-08-03 13:40:16 +0200 |
---|---|---|
committer | dimitri staessens <[email protected]> | 2016-08-03 13:40:16 +0200 |
commit | 4931526cf9b5e40294e043deab856f25bf56c7cf (patch) | |
tree | fff3eeadb6eb04edee21340ecdcdfc13da3115b4 /include | |
parent | ca494922f3815077efbcd28da3748df38c8a6961 (diff) | |
download | ouroboros-4931526cf9b5e40294e043deab856f25bf56c7cf.tar.gz ouroboros-4931526cf9b5e40294e043deab856f25bf56c7cf.zip |
lib: Revise blocking I/O
Blocking I/O now uses condition variables in the shared memory instead
of busy waiting. Timeouts can be specified. This requires the size of
the rbuffs and du_map to be the same, to guarantee that when the
shm_du_map is not full, the ap_rbuffs can't be full either.
Added the timeout option to the flow for future use.
Diffstat (limited to 'include')
-rw-r--r-- | include/ouroboros/config.h.in | 3 | ||||
-rw-r--r-- | include/ouroboros/shm_ap_rbuff.h | 3 | ||||
-rw-r--r-- | include/ouroboros/shm_du_map.h | 6 |
3 files changed, 10 insertions, 2 deletions
diff --git a/include/ouroboros/config.h.in b/include/ouroboros/config.h.in index 8898699c..46685569 100644 --- a/include/ouroboros/config.h.in +++ b/include/ouroboros/config.h.in @@ -40,12 +40,11 @@ #define SHM_DU_MAP_MULTI_BLOCK #define SHM_DU_MAP_FILENAME "/ouroboros.shm" #define LOCKFILE_NAME "/ouroboros.lockfile" -#define SHM_BLOCKS_IN_MAP (1 << 14) +#define SHM_BUFFER_SIZE (1 << 14) #define SHM_DU_TIMEOUT_MICROS 15000 #define DU_BUFF_HEADSPACE 128 #define DU_BUFF_TAILSPACE 0 #define SHM_AP_RBUFF_PREFIX "/ouroboros.rbuff." -#define SHM_RBUFF_SIZE (1 << 14) #define IRMD_MAX_FLOWS 4096 #define IRMD_THREADPOOL_SIZE 5 #define IRMD_FLOW_TIMEOUT 5000 /* ms */ diff --git a/include/ouroboros/shm_ap_rbuff.h b/include/ouroboros/shm_ap_rbuff.h index 257a289d..50b077f0 100644 --- a/include/ouroboros/shm_ap_rbuff.h +++ b/include/ouroboros/shm_ap_rbuff.h @@ -46,6 +46,9 @@ int shm_ap_rbuff_peek(struct shm_ap_rbuff * rb, const struct timespec * timeout); ssize_t shm_ap_rbuff_read_port(struct shm_ap_rbuff * rb, int port_id); +ssize_t shm_ap_rbuff_read_port_b(struct shm_ap_rbuff * rb, + int port_id, + const struct timespec * timeout); pid_t shm_ap_rbuff_get_api(struct shm_ap_rbuff * rb); void shm_ap_rbuff_reset(struct shm_ap_rbuff * rb); #endif /* OUROBOROS_SHM_AP_RBUFF_H */ diff --git a/include/ouroboros/shm_du_map.h b/include/ouroboros/shm_du_map.h index b9c56cf8..98013fc9 100644 --- a/include/ouroboros/shm_du_map.h +++ b/include/ouroboros/shm_du_map.h @@ -45,6 +45,12 @@ ssize_t shm_du_map_write(struct shm_du_map * dum, size_t tailspace, uint8_t * data, size_t data_len); +ssize_t shm_du_map_write_b(struct shm_du_map * dum, + pid_t dst_api, + size_t headspace, + size_t tailspace, + uint8_t * data, + size_t data_len); int shm_du_map_read(uint8_t ** dst, struct shm_du_map * dum, ssize_t idx); |