shmsize += sizeof(struct lib_ring_buffer_shmp);
shmobj = shm_object_table_append(handle->table, shmsize);
+ if (!shmobj)
+ goto error_append;
set_shmp(handle->chan, zalloc_shm(shmobj, sizeof(struct channel)));
chan = shmp(handle, handle->chan);
if (!chan)
struct lib_ring_buffer *channel_get_ring_buffer(
const struct lib_ring_buffer_config *config,
struct channel *chan, int cpu,
- struct shm_handle *handle)
+ struct shm_handle *handle,
+ int *shm_fd, int *wait_fd,
+ uint64_t *memory_map_size)
{
- if (config->alloc == RING_BUFFER_ALLOC_GLOBAL)
+ struct shm_ref *ref;
+
+ if (config->alloc == RING_BUFFER_ALLOC_GLOBAL) {
+ ref = &chan->backend.buf[0].shmp._ref;
+ shm_get_object_data(handle, ref, shm_fd, wait_fd,
+ memory_map_size);
return shmp(handle, chan->backend.buf[0].shmp);
- else
+ } else {
+ ref = &chan->backend.buf[cpu].shmp._ref;
+ shm_get_object_data(handle, ref, shm_fd, wait_fd,
+ memory_map_size);
return shmp(handle, chan->backend.buf[cpu].shmp);
+ }
}
int lib_ring_buffer_open_read(struct lib_ring_buffer *buf,