mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	bluez5: backend-native: fix getsockopt/fcntl error code handling
This commit is contained in:
		
							parent
							
								
									aa06c547d9
								
							
						
					
					
						commit
						282c7975fa
					
				
					 1 changed files with 8 additions and 7 deletions
				
			
		| 
						 | 
					@ -1487,8 +1487,9 @@ static void sco_ready(struct spa_bt_transport *t)
 | 
				
			||||||
		if (td->err == -EINPROGRESS) {
 | 
							if (td->err == -EINPROGRESS) {
 | 
				
			||||||
			len = sizeof(err);
 | 
								len = sizeof(err);
 | 
				
			||||||
			memset(&err, 0, len);
 | 
								memset(&err, 0, len);
 | 
				
			||||||
			td->err = getsockopt(t->fd, SOL_SOCKET, SO_ERROR, &err, &len);
 | 
								if (getsockopt(t->fd, SOL_SOCKET, SO_ERROR, &err, &len) < 0)
 | 
				
			||||||
			if (td->err >= 0)
 | 
									td->err = -errno;
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
				td->err = -err;
 | 
									td->err = -err;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
| 
						 | 
					@ -1500,7 +1501,7 @@ static void sco_ready(struct spa_bt_transport *t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	td->requesting = false;
 | 
						td->requesting = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (td->err < 0)
 | 
						if (td->err)
 | 
				
			||||||
		goto done;
 | 
							goto done;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* XXX: The MTU as currently reported by kernel (6.2) here is not a valid packet size,
 | 
						/* XXX: The MTU as currently reported by kernel (6.2) here is not a valid packet size,
 | 
				
			||||||
| 
						 | 
					@ -1508,7 +1509,7 @@ static void sco_ready(struct spa_bt_transport *t)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	len = sizeof(sco_opt);
 | 
						len = sizeof(sco_opt);
 | 
				
			||||||
	memset(&sco_opt, 0, len);
 | 
						memset(&sco_opt, 0, len);
 | 
				
			||||||
	if ((err = getsockopt(t->fd, SOL_SCO, SCO_OPTIONS, &sco_opt, &len)) < 0) {
 | 
						if (getsockopt(t->fd, SOL_SCO, SCO_OPTIONS, &sco_opt, &len) < 0) {
 | 
				
			||||||
		spa_log_warn(backend->log, "getsockopt(SCO_OPTIONS) failed, using defaults");
 | 
							spa_log_warn(backend->log, "getsockopt(SCO_OPTIONS) failed, using defaults");
 | 
				
			||||||
		t->read_mtu = 48;
 | 
							t->read_mtu = 48;
 | 
				
			||||||
		t->write_mtu = 48;
 | 
							t->write_mtu = 48;
 | 
				
			||||||
| 
						 | 
					@ -1521,18 +1522,18 @@ static void sco_ready(struct spa_bt_transport *t)
 | 
				
			||||||
	/* Clear nonblocking flag we set for connect() */
 | 
						/* Clear nonblocking flag we set for connect() */
 | 
				
			||||||
	err = fcntl(t->fd, F_GETFL, O_NONBLOCK);
 | 
						err = fcntl(t->fd, F_GETFL, O_NONBLOCK);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		td->err = err;
 | 
							td->err = -errno;
 | 
				
			||||||
		goto done;
 | 
							goto done;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	err &= ~O_NONBLOCK;
 | 
						err &= ~O_NONBLOCK;
 | 
				
			||||||
	err = fcntl(t->fd, F_SETFL, O_NONBLOCK, err);
 | 
						err = fcntl(t->fd, F_SETFL, O_NONBLOCK, err);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		td->err = err;
 | 
							td->err = -errno;
 | 
				
			||||||
		goto done;
 | 
							goto done;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
done:
 | 
					done:
 | 
				
			||||||
	if (td->err < 0) {
 | 
						if (td->err) {
 | 
				
			||||||
		spa_log_debug(backend->log, "transport %p: acquire failed: %s (%d)",
 | 
							spa_log_debug(backend->log, "transport %p: acquire failed: %s (%d)",
 | 
				
			||||||
				t, strerror(-td->err), td->err);
 | 
									t, strerror(-td->err), td->err);
 | 
				
			||||||
		spa_bt_transport_set_state(t, SPA_BT_TRANSPORT_STATE_ERROR);
 | 
							spa_bt_transport_set_state(t, SPA_BT_TRANSPORT_STATE_ERROR);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue