Lines Matching refs:shm_channel

87 /** Check if shm_channel is valid */
88 #define SHM_CHANNEL_CHECK(shm_channel, func_name) \
90 if ((shm_channel) == NULL) \
92 DBG (3, "%s: BUG: shm_channel==NULL\n", (func_name)); \
173 Shm_Channel *shm_channel;
199 shm_channel = (Shm_Channel *) malloc (sizeof (Shm_Channel));
200 if (!shm_channel)
206 shm_channel->buf_size = buf_size;
207 shm_channel->buf_count = buf_count;
208 shm_channel->shm_area = NULL;
209 shm_channel->buffers = NULL;
210 shm_channel->buffer_bytes = NULL;
211 shm_channel->writer_put_pipe[0] = shm_channel->writer_put_pipe[1] = -1;
212 shm_channel->reader_put_pipe[0] = shm_channel->reader_put_pipe[1] = -1;
214 shm_channel->buffers =
216 if (!shm_channel->buffers)
219 shm_channel_free (shm_channel);
223 if (pipe (shm_channel->writer_put_pipe) == -1)
227 shm_channel_free (shm_channel);
231 if (pipe (shm_channel->reader_put_pipe) == -1)
235 shm_channel_free (shm_channel);
239 shm_channel_fd_set_close_on_exec (shm_channel->reader_put_pipe[0]);
240 shm_channel_fd_set_close_on_exec (shm_channel->reader_put_pipe[1]);
241 shm_channel_fd_set_close_on_exec (shm_channel->writer_put_pipe[0]);
242 shm_channel_fd_set_close_on_exec (shm_channel->writer_put_pipe[1]);
253 shm_channel_free (shm_channel);
263 shm_channel_free (shm_channel);
273 shm_channel_free (shm_channel);
277 shm_channel->shm_area = shm_area;
279 shm_channel->buffer_bytes = (SANE_Int *) shm_area;
281 for (i = 0; i < shm_channel->buf_count; ++i)
283 shm_channel->buffers[i] = shm_data;
287 *shm_channel_return = shm_channel;
293 * @param shm_channel Shared memory channel object.
296 shm_channel_free (Shm_Channel * shm_channel)
298 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_free");
300 if (shm_channel->shm_area)
302 shmdt (shm_channel->shm_area);
303 shm_channel->shm_area = NULL;
306 if (shm_channel->buffers)
308 free (shm_channel->buffers);
309 shm_channel->buffers = NULL;
312 shm_channel_fd_safe_close (&shm_channel->reader_put_pipe[0]);
313 shm_channel_fd_safe_close (&shm_channel->reader_put_pipe[1]);
314 shm_channel_fd_safe_close (&shm_channel->writer_put_pipe[0]);
315 shm_channel_fd_safe_close (&shm_channel->writer_put_pipe[1]);
325 * @param shm_channel Shared memory channel object.
328 shm_channel_writer_init (Shm_Channel * shm_channel)
330 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_writer_init");
332 shm_channel_fd_safe_close (&shm_channel->writer_put_pipe[0]);
333 shm_channel_fd_safe_close (&shm_channel->reader_put_pipe[1]);
347 * @param shm_channel Shared memory channel object.
359 shm_channel_writer_get_buffer (Shm_Channel * shm_channel,
366 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_writer_get_buffer");
369 bytes_read = read (shm_channel->reader_put_pipe[0], &buf_index, 1);
375 if (index < shm_channel->buf_count)
378 *buffer_addr_return = shm_channel->buffers[index];
393 * @param shm_channel Shared memory channel object.
403 shm_channel_writer_put_buffer (Shm_Channel * shm_channel,
409 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_writer_put_buffer");
411 if (buffer_id < 0 || buffer_id >= shm_channel->buf_count)
418 shm_channel->buffer_bytes[buffer_id] = buffer_bytes;
422 bytes_written = write (shm_channel->writer_put_pipe[1], &buf_index, 1);
433 * @param shm_channel Shared memory channel object.
436 shm_channel_writer_close (Shm_Channel * shm_channel)
438 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_writer_close");
440 shm_channel_fd_safe_close (&shm_channel->writer_put_pipe[1]);
451 * @param shm_channel Shared memory channel object.
454 shm_channel_reader_init (Shm_Channel * shm_channel)
456 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_reader_init");
458 shm_channel_fd_safe_close (&shm_channel->writer_put_pipe[1]);
463 /* shm_channel_fd_safe_close (&shm_channel->reader_put_pipe[0]); */
472 * @param shm_channel Shared memory channel object.
481 shm_channel_reader_set_io_mode (Shm_Channel * shm_channel,
484 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_reader_set_io_mode");
486 return shm_channel_fd_set_non_blocking (shm_channel->writer_put_pipe[0],
497 * @param shm_channel Shared memory channel object.
504 shm_channel_reader_get_select_fd (Shm_Channel * shm_channel,
507 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_reader_get_select_fd");
509 *fd_return = shm_channel->writer_put_pipe[0];
522 * @param shm_channel Shared memory channel object.
525 shm_channel_reader_start (Shm_Channel * shm_channel)
530 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_reader_start");
532 for (i = 0; i < shm_channel->buf_count; ++i)
537 write (shm_channel->reader_put_pipe[1], &buffer_id, 1);
563 * @param shm_channel Shared memory channel object.
577 shm_channel_reader_get_buffer (Shm_Channel * shm_channel,
585 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_reader_get_buffer");
588 bytes_read = read (shm_channel->writer_put_pipe[0], &buf_index, 1);
594 if (index < shm_channel->buf_count)
597 *buffer_addr_return = shm_channel->buffers[index];
598 *buffer_bytes_return = shm_channel->buffer_bytes[index];
622 * @param shm_channel Shared memory channel object.
631 shm_channel_reader_put_buffer (Shm_Channel * shm_channel, SANE_Int buffer_id)
636 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_reader_put_buffer");
638 if (buffer_id < 0 || buffer_id >= shm_channel->buf_count)
647 bytes_written = write (shm_channel->reader_put_pipe[1], &buf_index, 1);
659 * @param shm_channel Shared memory channel object.
662 shm_channel_reader_close (Shm_Channel * shm_channel)
664 SHM_CHANNEL_CHECK (shm_channel, "shm_channel_reader_close");
666 shm_channel_fd_safe_close (&shm_channel->reader_put_pipe[1]);