mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
improve error handling
This commit is contained in:
parent
c30d938034
commit
5850044599
6 changed files with 45 additions and 15 deletions
|
|
@ -36,11 +36,20 @@ static int spa_alsa_open(struct state *state)
|
|||
|
||||
state->timerfd = spa_system_timerfd_create(state->data_system,
|
||||
CLOCK_MONOTONIC, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
|
||||
if (state->timerfd == -1) {
|
||||
err = -errno;
|
||||
goto err_close;
|
||||
}
|
||||
|
||||
state->opened = true;
|
||||
state->sample_count = 0;
|
||||
state->sample_time = 0;
|
||||
|
||||
return 0;
|
||||
|
||||
err_close:
|
||||
snd_pcm_close(state->hndl);
|
||||
return err;
|
||||
}
|
||||
|
||||
int spa_alsa_close(struct state *state)
|
||||
|
|
|
|||
|
|
@ -727,6 +727,7 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
{
|
||||
struct impl *impl;
|
||||
uint32_t i;
|
||||
int res;
|
||||
|
||||
spa_return_val_if_fail(factory != NULL, -EINVAL);
|
||||
spa_return_val_if_fail(handle != NULL, -EINVAL);
|
||||
|
|
@ -760,12 +761,16 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
}
|
||||
if (impl->system == NULL) {
|
||||
spa_log_error(impl->log, NAME " %p: a System is needed", impl);
|
||||
return -EINVAL;
|
||||
res = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
impl->poll_fd = spa_system_pollfd_create(impl->system, SPA_FD_CLOEXEC);
|
||||
if (impl->poll_fd < 0)
|
||||
return errno;
|
||||
if (impl->poll_fd < 0) {
|
||||
res = -errno;
|
||||
spa_log_error(impl->log, NAME " %p: can't create pollfd: %m", impl);
|
||||
goto err;
|
||||
}
|
||||
|
||||
spa_list_init(&impl->source_list);
|
||||
spa_list_init(&impl->destroy_list);
|
||||
|
|
@ -774,12 +779,28 @@ impl_init(const struct spa_handle_factory *factory,
|
|||
spa_ringbuffer_init(&impl->buffer);
|
||||
|
||||
impl->wakeup = loop_add_event(impl, wakeup_func, impl);
|
||||
if (impl->wakeup == NULL) {
|
||||
res = -errno;
|
||||
spa_log_error(impl->log, NAME " %p: can't create wakeup event: %m", impl);
|
||||
goto err_free_poll;
|
||||
}
|
||||
impl->ack_fd = spa_system_eventfd_create(impl->system,
|
||||
SPA_FD_EVENT_SEMAPHORE | SPA_FD_CLOEXEC);
|
||||
|
||||
if (impl->ack_fd < 0) {
|
||||
res = -errno;
|
||||
spa_log_error(impl->log, NAME " %p: can't create ack event: %m", impl);
|
||||
goto err_free_wakeup;
|
||||
}
|
||||
spa_log_debug(impl->log, NAME " %p: initialized", impl);
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_wakeup:
|
||||
loop_destroy_source(impl, impl->wakeup);
|
||||
err_free_poll:
|
||||
spa_system_close(impl->system, impl->poll_fd);
|
||||
err:
|
||||
return res;
|
||||
}
|
||||
|
||||
static const struct spa_interface_info impl_interfaces[] = {
|
||||
|
|
|
|||
|
|
@ -107,6 +107,11 @@ int main(int argc, char *argv[])
|
|||
PW_KEY_CORE_DAEMON, "1", NULL),
|
||||
0);
|
||||
|
||||
if (core == NULL) {
|
||||
pw_log_error("failed to create core: %m");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pw_daemon_config_run_commands(config, core) < 0) {
|
||||
pw_log_error("failed to run config commands");
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -74,12 +74,14 @@ struct pw_data_loop *pw_data_loop_new(struct pw_properties *properties)
|
|||
|
||||
this->loop = pw_loop_new(properties);
|
||||
if (this->loop == NULL) {
|
||||
pw_log_debug("data-loop %p: can't create loop: %m", this);
|
||||
res = -errno;
|
||||
goto no_loop;
|
||||
}
|
||||
|
||||
this->event = pw_loop_add_event(this->loop, do_stop, this);
|
||||
if (this->event == NULL) {
|
||||
pw_log_debug("data-loop %p: can't add event: %m", this);
|
||||
res = -errno;
|
||||
goto no_event;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ struct pw_loop *pw_loop_new(struct pw_properties *properties)
|
|||
if ((res = spa_handle_get_interface(impl->system_handle,
|
||||
SPA_TYPE_INTERFACE_System,
|
||||
&iface)) < 0) {
|
||||
fprintf(stderr, "can't get System interface %d\n", res);
|
||||
pw_log_error("can't get System interface %d\n", res);
|
||||
goto out_free_system;
|
||||
}
|
||||
this->system = iface;
|
||||
|
|
@ -104,18 +104,10 @@ struct pw_loop *pw_loop_new(struct pw_properties *properties)
|
|||
n_support, support);
|
||||
if (impl->loop_handle == NULL) {
|
||||
res = -errno;
|
||||
pw_log_error("can't make loop handle");
|
||||
pw_log_error("can't make loop handle: %m");
|
||||
goto out_free_system;
|
||||
}
|
||||
|
||||
if ((res = spa_handle_get_interface(impl->system_handle,
|
||||
SPA_TYPE_INTERFACE_System,
|
||||
&iface)) < 0) {
|
||||
fprintf(stderr, "can't get System interface %d\n", res);
|
||||
goto out_free_loop;
|
||||
}
|
||||
this->system = iface;
|
||||
|
||||
if ((res = spa_handle_get_interface(impl->loop_handle,
|
||||
SPA_TYPE_INTERFACE_Loop,
|
||||
&iface)) < 0) {
|
||||
|
|
|
|||
|
|
@ -256,7 +256,8 @@ struct spa_handle *pw_load_spa_handle(const char *lib,
|
|||
if ((res = spa_handle_factory_init(factory,
|
||||
&handle->handle, info,
|
||||
support, n_support)) < 0) {
|
||||
pw_log_warn("can't make factory instance %s: %d\n", factory_name, res);
|
||||
pw_log_warn("can't make factory instance '%s': %d (%s)",
|
||||
factory_name, res, spa_strerror(res));
|
||||
goto out_free_handle;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue