u->first = true;
u->rewind_safeguard = rewind_safeguard;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
u->smoother = pa_smoother_new(
SMOOTHER_ADJUST_USEC,
u->fixed_latency_range = fixed_latency_range;
u->first = true;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
u->smoother = pa_smoother_new(
SMOOTHER_ADJUST_USEC,
pa_assert(!u->rtpoll_item);
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ return -1;
+ }
if (USE_SCO_OVER_PCM(u)) {
if (sco_over_pcm_state_update(u, false) < 0) {
pa_assert(!u->rtpoll_item);
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ return -1;
+ }
if (!(u->thread = pa_thread_new("bluetooth", thread_func, u))) {
pa_log_error("Failed to create IO thread");
goto fail;
u->asyncmsgq = pa_asyncmsgq_new(0);
+ if (!u->asyncmsgq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
+
u->need_realign = true;
source_output_ss = source_ss;
u->module = m;
u->saved_frame_time_valid = false;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
/* The queue linking the JACK thread and our RT thread */
u->jack_msgq = pa_asyncmsgq_new(0);
+ if (!u->jack_msgq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
/* The msgq from the JACK RT thread should have an even higher
* priority than the normal message queues, to match the guarantee
u->module = m;
u->saved_frame_time_valid = false;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
u->jack_msgq = pa_asyncmsgq_new(0);
+ if (!u->jack_msgq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
+
u->rtpoll_item = pa_rtpoll_item_new_asyncmsgq_read(u->rtpoll, PA_RTPOLL_EARLY-1, u->jack_msgq);
if (!(u->client = jack_client_open(client_name, server_name ? JackServerName : JackNullOption, &status, server_name))) {
pa_card_put(u->card);
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
+
u->async_msgq = pa_asyncmsgq_new(0);
+ if (!u->async_msgq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
+
pa_rtpoll_item_new_asyncmsgq_read(u->rtpoll, PA_RTPOLL_EARLY-1, u->async_msgq);
PA_LLIST_HEAD_INIT(coreaudio_sink, u->sinks);
pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
pa_thread_free(u->thread);
pa_thread_mq_done(&u->thread_mq);
- pa_asyncmsgq_unref(u->async_msgq);
}
+ if (u->async_msgq)
+ pa_asyncmsgq_unref(u->async_msgq);
+
/* free sinks */
for (ca_sink = u->sinks; ca_sink;) {
coreaudio_sink *next = ca_sink->next;
o = pa_xnew0(struct output, 1);
o->userdata = u;
+
o->audio_inq = pa_asyncmsgq_new(0);
+ if (!o->audio_inq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
+
o->control_inq = pa_asyncmsgq_new(0);
+ if (!o->control_inq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
+
o->outq = pa_asyncmsgq_new(0);
+ if (!o->outq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
+
o->sink = sink;
o->memblockq = pa_memblockq_new(
"module-combine-sink output memblockq",
update_description(u);
return o;
+
+fail:
+ output_free(o);
+
+ return NULL;
}
/* Called from main context */
u->core = m->core;
u->module = m;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
+
u->resample_method = resample_method;
u->outputs = pa_idxset_new(NULL, NULL);
u->thread_info.smoother = pa_smoother_new(
u->offset = 0;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
+
u->rtpoll_item = NULL;
u->format =
pa_memblock_unref(silence.memblock);
u->asyncmsgq = pa_asyncmsgq_new(0);
+ if (!u->asyncmsgq) {
+ pa_log("pa_asyncmsgq_new() failed.");
+ goto fail;
+ }
if (!pa_proplist_contains(u->source_output->proplist, PA_PROP_MEDIA_NAME))
pa_proplist_setf(u->source_output->proplist, PA_PROP_MEDIA_NAME, "Loopback to %s",
u->core = m->core;
u->module = m;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
pa_sink_new_data_init(&data);
data.driver = __FILE__;
u->core = m->core;
u->module = m;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
pa_source_new_data_init(&data);
data.driver = __FILE__;
m->userdata = u;
pa_memchunk_reset(&u->memchunk);
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
+
u->write_type = 0;
u->filename = pa_runtime_path(pa_modargs_get_value(ma, "file", DEFAULT_FILE_NAME));
u->module = m;
pa_memchunk_reset(&u->memchunk);
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
u->filename = pa_runtime_path(pa_modargs_get_value(ma, "file", DEFAULT_FILE_NAME));
u->core = m->core;
u->module = m;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
u->peek_index = 0;
pa_memchunk_sine(&u->memchunk, m->core->mempool, ss.rate, frequency);
pa_memchunk_reset(&u->memchunk);
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
u->rtpoll_item = NULL;
build_pollfd(u);
u->remote_sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->thread_mq = pa_xnew0(pa_thread_mq, 1);
- pa_thread_mq_init_thread_mainloop(u->thread_mq, m->core->mainloop, u->thread_mainloop_api);
+
+ if (pa_thread_mq_init_thread_mainloop(u->thread_mq, m->core->mainloop, u->thread_mainloop_api) < 0) {
+ pa_log("pa_thread_mq_init_thread_mainloop() failed.");
+ goto fail;
+ }
/* Create sink */
pa_sink_new_data_init(&sink_data);
u->remote_source_name = pa_xstrdup(pa_modargs_get_value(ma, "source", NULL));
u->thread_mq = pa_xnew0(pa_thread_mq, 1);
- pa_thread_mq_init_thread_mainloop(u->thread_mq, m->core->mainloop, u->thread_mainloop_api);
+
+ if (pa_thread_mq_init_thread_mainloop(u->thread_mq, m->core->mainloop, u->thread_mainloop_api) < 0) {
+ pa_log("pa_thread_mq_init_thread_mainloop() failed.");
+ goto fail;
+ }
/* Create source */
pa_source_new_data_init(&source_data);
u->counter = u->counter_delta = 0;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
if (pa_modargs_get_value_boolean(ma, "auto", &automatic) < 0) {
pa_log("Failed to parse argument \"auto\".");
sink_get_volume_cb(u->sink);
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
if (u->sink) {
pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
u->mainloop = pa_threaded_mainloop_new();
u->api = pa_threaded_mainloop_get_api(u->mainloop);
- pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll);
+ if (pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
+
u->msg = pa_msgobject_new(avahi_msg);
u->msg->parent.process_msg = avahi_process_msg;
u->orig_frag_size = orig_frag_size;
u->use_mmap = use_mmap;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
+
u->rtpoll_item = NULL;
build_pollfd(u);
u->encoding_ratio = 1.0;
u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+
+ if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+ pa_log("pa_thread_mq_init() failed.");
+ goto fail;
+ }
+
u->rtpoll_item = NULL;
/*u->format =
};
pa_asyncmsgq *pa_asyncmsgq_new(unsigned size) {
+ pa_asyncq *asyncq;
pa_asyncmsgq *a;
+ asyncq = pa_asyncq_new(size);
+ if (!asyncq)
+ return NULL;
+
a = pa_xnew(pa_asyncmsgq, 1);
PA_REFCNT_INIT(a);
- pa_assert_se(a->asyncq = pa_asyncq_new(size));
+ a->asyncq = asyncq;
pa_assert_se(a->mutex = pa_mutex_new(false, true));
a->current = NULL;
pa_asyncmsgq_write_before_poll(q->outq);
}
-void pa_thread_mq_init_thread_mainloop(pa_thread_mq *q, pa_mainloop_api *main_mainloop, pa_mainloop_api *thread_mainloop) {
+int pa_thread_mq_init_thread_mainloop(pa_thread_mq *q, pa_mainloop_api *main_mainloop, pa_mainloop_api *thread_mainloop) {
pa_assert(q);
pa_assert(main_mainloop);
pa_assert(thread_mainloop);
- pa_assert_se(q->inq = pa_asyncmsgq_new(0));
- pa_assert_se(q->outq = pa_asyncmsgq_new(0));
+ pa_zero(*q);
+
+ q->inq = pa_asyncmsgq_new(0);
+ if (!q->inq)
+ goto fail;
+
+ q->outq = pa_asyncmsgq_new(0);
+ if (!q->outq)
+ goto fail;
q->main_mainloop = main_mainloop;
q->thread_mainloop = thread_mainloop;
pa_asyncmsgq_write_before_poll(q->inq);
pa_assert_se(q->read_thread_event = thread_mainloop->io_new(thread_mainloop, pa_asyncmsgq_read_fd(q->inq), PA_IO_EVENT_INPUT, asyncmsgq_read_cb, q));
pa_assert_se(q->write_main_event = main_mainloop->io_new(main_mainloop, pa_asyncmsgq_write_fd(q->inq), PA_IO_EVENT_INPUT, asyncmsgq_write_inq_cb, q));
+
+ return 0;
+
+fail:
+ pa_thread_mq_done(q);
+
+ return -1;
}
-void pa_thread_mq_init(pa_thread_mq *q, pa_mainloop_api *mainloop, pa_rtpoll *rtpoll) {
+int pa_thread_mq_init(pa_thread_mq *q, pa_mainloop_api *mainloop, pa_rtpoll *rtpoll) {
pa_assert(q);
pa_assert(mainloop);
+ pa_zero(*q);
+
q->main_mainloop = mainloop;
q->thread_mainloop = NULL;
- pa_assert_se(q->inq = pa_asyncmsgq_new(0));
- pa_assert_se(q->outq = pa_asyncmsgq_new(0));
+ q->inq = pa_asyncmsgq_new(0);
+ if (!q->inq)
+ goto fail;
+
+ q->outq = pa_asyncmsgq_new(0);
+ if (!q->outq)
+ goto fail;
pa_assert_se(pa_asyncmsgq_read_before_poll(q->outq) == 0);
pa_assert_se(q->read_main_event = mainloop->io_new(mainloop, pa_asyncmsgq_read_fd(q->outq), PA_IO_EVENT_INPUT, asyncmsgq_read_cb, q));
pa_rtpoll_item_new_asyncmsgq_read(rtpoll, PA_RTPOLL_EARLY, q->inq);
pa_rtpoll_item_new_asyncmsgq_write(rtpoll, PA_RTPOLL_LATE, q->outq);
+
+ return 0;
+
+fail:
+ pa_thread_mq_done(q);
+
+ return -1;
}
void pa_thread_mq_done(pa_thread_mq *q) {
pa_io_event *read_thread_event, *write_thread_event;
} pa_thread_mq;
-void pa_thread_mq_init(pa_thread_mq *q, pa_mainloop_api *mainloop, pa_rtpoll *rtpoll);
-void pa_thread_mq_init_thread_mainloop(pa_thread_mq *q, pa_mainloop_api *main_mainloop, pa_mainloop_api *thread_mainloop);
+int pa_thread_mq_init(pa_thread_mq *q, pa_mainloop_api *mainloop, pa_rtpoll *rtpoll);
+int pa_thread_mq_init_thread_mainloop(pa_thread_mq *q, pa_mainloop_api *main_mainloop, pa_mainloop_api *thread_mainloop);
void pa_thread_mq_done(pa_thread_mq *q);
/* Install the specified pa_thread_mq object for the current thread */