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