mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
netjack2: handle connection errors in more cases
This commit is contained in:
parent
c7b318523d
commit
6e8db1cd4a
2 changed files with 17 additions and 5 deletions
|
|
@ -359,6 +359,15 @@ static void sink_process(void *d, struct spa_io_position *position)
|
||||||
pw_loop_update_io(s->impl->data_loop, follower->socket, SPA_IO_IN);
|
pw_loop_update_io(s->impl->data_loop, follower->socket, SPA_IO_IN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int stop_follower(struct follower *follower);
|
||||||
|
|
||||||
|
static int do_stop_follower(struct spa_loop *loop,
|
||||||
|
bool async, uint32_t seq, const void *data, size_t size, void *user_data)
|
||||||
|
{
|
||||||
|
stop_follower(user_data);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void handle_source_process(struct stream *s, struct spa_io_position *position)
|
static inline void handle_source_process(struct stream *s, struct spa_io_position *position)
|
||||||
{
|
{
|
||||||
struct follower *follower = s->follower;
|
struct follower *follower = s->follower;
|
||||||
|
|
@ -369,7 +378,10 @@ static inline void handle_source_process(struct stream *s, struct spa_io_positio
|
||||||
|
|
||||||
set_info(s, nframes, midi, &n_midi, audio, &n_audio);
|
set_info(s, nframes, midi, &n_midi, audio, &n_audio);
|
||||||
|
|
||||||
netjack2_manager_sync_wait(&follower->peer);
|
if (netjack2_manager_sync_wait(&follower->peer) < 0) {
|
||||||
|
pw_loop_invoke(s->impl->main_loop, do_stop_follower, 0, NULL, 0, false, follower);
|
||||||
|
return;
|
||||||
|
}
|
||||||
netjack2_recv_data(&follower->peer, midi, n_midi, audio, n_audio);
|
netjack2_recv_data(&follower->peer, midi, n_midi, audio, n_audio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -481,8 +493,8 @@ on_data_io(void *data, int fd, uint32_t mask)
|
||||||
|
|
||||||
if (mask & (SPA_IO_ERR | SPA_IO_HUP)) {
|
if (mask & (SPA_IO_ERR | SPA_IO_HUP)) {
|
||||||
pw_log_warn("error:%08x", mask);
|
pw_log_warn("error:%08x", mask);
|
||||||
pw_loop_destroy_source(impl->data_loop, follower->socket);
|
pw_loop_update_io(impl->data_loop, follower->socket, 0);
|
||||||
follower->socket = NULL;
|
pw_loop_invoke(impl->main_loop, do_stop_follower, 0, NULL, 0, false, follower);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mask & SPA_IO_IN) {
|
if (mask & SPA_IO_IN) {
|
||||||
|
|
|
||||||
|
|
@ -758,7 +758,7 @@ static inline int32_t netjack2_driver_sync_wait(struct netjack2_peer *peer)
|
||||||
|
|
||||||
receive_error:
|
receive_error:
|
||||||
pw_log_warn("recv error: %m");
|
pw_log_warn("recv error: %m");
|
||||||
return 0;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int32_t netjack2_manager_sync_wait(struct netjack2_peer *peer)
|
static inline int32_t netjack2_manager_sync_wait(struct netjack2_peer *peer)
|
||||||
|
|
@ -802,7 +802,7 @@ static inline int32_t netjack2_manager_sync_wait(struct netjack2_peer *peer)
|
||||||
|
|
||||||
receive_error:
|
receive_error:
|
||||||
pw_log_warn("recv error: %m");
|
pw_log_warn("recv error: %m");
|
||||||
return 0;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int netjack2_recv_midi(struct netjack2_peer *peer, struct nj2_packet_header *header, uint32_t *count,
|
static int netjack2_recv_midi(struct netjack2_peer *peer, struct nj2_packet_header *header, uint32_t *count,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue