mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	remote: handle buffer errors
This commit is contained in:
		
							parent
							
								
									7bc9230a79
								
							
						
					
					
						commit
						e9685c794f
					
				
					 1 changed files with 20 additions and 7 deletions
				
			
		| 
						 | 
					@ -1022,8 +1022,9 @@ client_node_port_use_buffers(void *object,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		struct mem_id *mid = find_mem(&data->mem_ids, buffers[i].mem_id);
 | 
							struct mem_id *mid = find_mem(&data->mem_ids, buffers[i].mem_id);
 | 
				
			||||||
		if (mid == NULL) {
 | 
							if (mid == NULL) {
 | 
				
			||||||
			pw_log_warn("unknown memory id %u", buffers[i].mem_id);
 | 
								pw_log_error("unknown memory id %u", buffers[i].mem_id);
 | 
				
			||||||
			continue;
 | 
								res = -EINVAL;
 | 
				
			||||||
 | 
								goto cleanup;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		len = pw_array_get_len(&port->buffer_ids, struct buffer_id);
 | 
							len = pw_array_get_len(&port->buffer_ids, struct buffer_id);
 | 
				
			||||||
| 
						 | 
					@ -1034,9 +1035,10 @@ client_node_port_use_buffers(void *object,
 | 
				
			||||||
		bid->ptr = mmap(NULL, bid->map.size, prot, MAP_SHARED, mid->fd, bid->map.offset);
 | 
							bid->ptr = mmap(NULL, bid->map.size, prot, MAP_SHARED, mid->fd, bid->map.offset);
 | 
				
			||||||
		if (bid->ptr == MAP_FAILED) {
 | 
							if (bid->ptr == MAP_FAILED) {
 | 
				
			||||||
			bid->ptr = NULL;
 | 
								bid->ptr = NULL;
 | 
				
			||||||
			pw_log_warn("Failed to mmap memory %u %u %u %d: %m",
 | 
								pw_log_error("Failed to mmap memory %u %u %u %d: %m",
 | 
				
			||||||
				bid->map.offset, bid->map.size, buffers[i].mem_id, mid->fd);
 | 
									bid->map.offset, bid->map.size, buffers[i].mem_id, mid->fd);
 | 
				
			||||||
			continue;
 | 
								res = -errno;
 | 
				
			||||||
 | 
								goto cleanup;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (mlock(bid->ptr, bid->map.size) < 0)
 | 
							if (mlock(bid->ptr, bid->map.size) < 0)
 | 
				
			||||||
			pw_log_warn("Failed to mlock memory %u %u: %m",
 | 
								pw_log_warn("Failed to mlock memory %u %u: %m",
 | 
				
			||||||
| 
						 | 
					@ -1093,8 +1095,14 @@ client_node_port_use_buffers(void *object,
 | 
				
			||||||
				       struct spa_chunk);
 | 
									       struct spa_chunk);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (d->type == t->data.MemFd || d->type == t->data.DmaBuf) {
 | 
								if (d->type == t->data.MemFd || d->type == t->data.DmaBuf) {
 | 
				
			||||||
				struct mem_id *bmid = find_mem(&data->mem_ids,
 | 
									uint32_t id = SPA_PTR_TO_UINT32(d->data);
 | 
				
			||||||
						SPA_PTR_TO_UINT32(d->data));
 | 
									struct mem_id *bmid = find_mem(&data->mem_ids, id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (bmid == NULL) {
 | 
				
			||||||
 | 
										pw_log_error("unknown buffer mem %u", id);
 | 
				
			||||||
 | 
										res = -EINVAL;
 | 
				
			||||||
 | 
										goto cleanup;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				d->data = NULL;
 | 
									d->data = NULL;
 | 
				
			||||||
				d->fd = bmid->fd;
 | 
									d->fd = bmid->fd;
 | 
				
			||||||
| 
						 | 
					@ -1117,6 +1125,11 @@ client_node_port_use_buffers(void *object,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      done:
 | 
					      done:
 | 
				
			||||||
	pw_client_node_proxy_done(data->node_proxy, seq, res);
 | 
						pw_client_node_proxy_done(data->node_proxy, seq, res);
 | 
				
			||||||
 | 
						return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     cleanup:
 | 
				
			||||||
 | 
						clear_buffers(data, port);
 | 
				
			||||||
 | 
						goto done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue