static struct iovec* get_write_buffer(test_data* td, int message_size, int* n_vecs) { struct shmem_pipe *sp = td->data; unsigned long offset; while ((offset = alloc_shared_space(sp, message_size)) == ALLOC_FAILED) wait_for_returned_buffers(sp); sp->iov.iov_base = sp->ring + offset; sp->iov.iov_len = message_size; *n_vecs = 1; return &sp->iov; }
struct fable_buf* fable_get_write_buf_shmem_pipe(void* handle, unsigned len) { struct shmem_pipe_handle_conn *sp = (struct shmem_pipe_handle_conn*)handle; unsigned long offset; unsigned allocated_len = len; while ((offset = alloc_shared_space(sp, &allocated_len)) == ALLOC_FAILED) { int wait_ret = wait_for_returned_buffers(sp); if(wait_ret == 0) errno = 0; if(wait_ret <= 0) return 0; } struct shmem_pipe_buf* buf = (struct shmem_pipe_buf*)malloc(sizeof(struct shmem_pipe_buf)); buf->iov.iov_base = ((char*)sp->ring) + offset; buf->iov.iov_len = allocated_len; buf->base.bufs = &buf->iov; buf->base.nbufs = 1; return &buf->base; }