mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	alsa: Handle pa_device_port_new() failures
pa_device_port_new() can't currently fail, but it soon can.
This commit is contained in:
		
							parent
							
								
									66f5a68732
								
							
						
					
					
						commit
						c2c00ce6c2
					
				
					 2 changed files with 33 additions and 5 deletions
				
			
		| 
						 | 
					@ -4500,7 +4500,12 @@ static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        p = pa_device_port_new(core, &port_data, sizeof(pa_alsa_port_data));
 | 
					        p = pa_device_port_new(core, &port_data, sizeof(pa_alsa_port_data));
 | 
				
			||||||
        pa_device_port_new_data_done(&port_data);
 | 
					        pa_device_port_new_data_done(&port_data);
 | 
				
			||||||
        pa_assert(p);
 | 
					
 | 
				
			||||||
 | 
					        if (!p) {
 | 
				
			||||||
 | 
					            pa_log("Failed to create port %s.", name);
 | 
				
			||||||
 | 
					            goto fail;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pa_hashmap_put(ports, p->name, p);
 | 
					        pa_hashmap_put(ports, p->name, p);
 | 
				
			||||||
        pa_proplist_update(p->proplist, PA_UPDATE_REPLACE, path->proplist);
 | 
					        pa_proplist_update(p->proplist, PA_UPDATE_REPLACE, path->proplist);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4519,6 +4524,9 @@ static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return p;
 | 
					    return p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fail:
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pa_alsa_path_set_add_ports(
 | 
					void pa_alsa_path_set_add_ports(
 | 
				
			||||||
| 
						 | 
					@ -4542,6 +4550,10 @@ void pa_alsa_path_set_add_ports(
 | 
				
			||||||
             * single entry */
 | 
					             * single entry */
 | 
				
			||||||
            pa_device_port *port = device_port_alsa_init(ports, path->name,
 | 
					            pa_device_port *port = device_port_alsa_init(ports, path->name,
 | 
				
			||||||
                path->description, path, path->settings, cp, extra, core);
 | 
					                path->description, path, path->settings, cp, extra, core);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!port)
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            port->priority = path->priority * 100;
 | 
					            port->priority = path->priority * 100;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
| 
						 | 
					@ -4558,10 +4570,13 @@ void pa_alsa_path_set_add_ports(
 | 
				
			||||||
                    d = pa_xstrdup(path->description);
 | 
					                    d = pa_xstrdup(path->description);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                port = device_port_alsa_init(ports, n, d, path, s, cp, extra, core);
 | 
					                port = device_port_alsa_init(ports, n, d, path, s, cp, extra, core);
 | 
				
			||||||
                port->priority = path->priority * 100 + s->priority;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                pa_xfree(n);
 | 
					                pa_xfree(n);
 | 
				
			||||||
                pa_xfree(d);
 | 
					                pa_xfree(d);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!port)
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                port->priority = path->priority * 100 + s->priority;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -678,7 +678,8 @@ static void ucm_add_port_combination(
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    unsigned priority;
 | 
					    unsigned priority;
 | 
				
			||||||
    double prio2;
 | 
					    double prio2;
 | 
				
			||||||
    char *name, *desc;
 | 
					    char *name = NULL;
 | 
				
			||||||
 | 
					    char *desc = NULL;
 | 
				
			||||||
    const char *dev_name;
 | 
					    const char *dev_name;
 | 
				
			||||||
    const char *direction;
 | 
					    const char *direction;
 | 
				
			||||||
    pa_alsa_ucm_device *dev;
 | 
					    pa_alsa_ucm_device *dev;
 | 
				
			||||||
| 
						 | 
					@ -731,7 +732,11 @@ static void ucm_add_port_combination(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        port = pa_device_port_new(core, &port_data, 0);
 | 
					        port = pa_device_port_new(core, &port_data, 0);
 | 
				
			||||||
        pa_device_port_new_data_done(&port_data);
 | 
					        pa_device_port_new_data_done(&port_data);
 | 
				
			||||||
        pa_assert(port);
 | 
					
 | 
				
			||||||
 | 
					        if (!port) {
 | 
				
			||||||
 | 
					            pa_log("Failed to create port %s.", name);
 | 
				
			||||||
 | 
					            goto fail;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pa_hashmap_put(ports, port->name, port);
 | 
					        pa_hashmap_put(ports, port->name, port);
 | 
				
			||||||
        pa_log_debug("Add port %s: %s", port->name, port->description);
 | 
					        pa_log_debug("Add port %s: %s", port->name, port->description);
 | 
				
			||||||
| 
						 | 
					@ -741,7 +746,9 @@ static void ucm_add_port_combination(
 | 
				
			||||||
    port->priority = priority;
 | 
					    port->priority = priority;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_xfree(name);
 | 
					    pa_xfree(name);
 | 
				
			||||||
 | 
					    name = NULL;
 | 
				
			||||||
    pa_xfree(desc);
 | 
					    pa_xfree(desc);
 | 
				
			||||||
 | 
					    desc = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    direction = is_sink ? "output" : "input";
 | 
					    direction = is_sink ? "output" : "input";
 | 
				
			||||||
    pa_log_debug("Port %s direction %s, priority %d", port->name, direction, priority);
 | 
					    pa_log_debug("Port %s direction %s, priority %d", port->name, direction, priority);
 | 
				
			||||||
| 
						 | 
					@ -755,6 +762,12 @@ static void ucm_add_port_combination(
 | 
				
			||||||
        pa_hashmap_put(hash, port->name, port);
 | 
					        pa_hashmap_put(hash, port->name, port);
 | 
				
			||||||
        pa_device_port_ref(port);
 | 
					        pa_device_port_ref(port);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fail:
 | 
				
			||||||
 | 
					    pa_xfree(name);
 | 
				
			||||||
 | 
					    pa_xfree(desc);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int ucm_port_contains(const char *port_name, const char *dev_name, bool is_sink) {
 | 
					static int ucm_port_contains(const char *port_name, const char *dev_name, bool is_sink) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue