Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6587cdb authored by Stefano Stabellini's avatar Stefano Stabellini Committed by Boris Ostrovsky
Browse files

pvcalls-back: set -ENOTCONN in pvcalls_conn_back_read



When a connection is closing we receive on pvcalls_sk_state_change
notification. Instead of setting the connection as closed immediately
(-ENOTCONN), let's read one more time from it: pvcalls_conn_back_read
will set the connection as closed when necessary.

That way, we avoid races between pvcalls_sk_state_change and
pvcalls_back_ioworker.

Signed-off-by: default avatarStefano Stabellini <stefanos@xilinx.com>
Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
parent d90a1ca6
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -160,9 +160,10 @@ static void pvcalls_conn_back_read(void *opaque)

	/* write the data, then modify the indexes */
	virt_wmb();
	if (ret < 0)
	if (ret < 0) {
		atomic_set(&map->read, 0);
		intf->in_error = ret;
	else
	} else
		intf->in_prod = prod + ret;
	/* update the indexes, then notify the other end */
	virt_wmb();
@@ -288,7 +289,7 @@ static void pvcalls_sk_state_change(struct sock *sock)
		return;

	intf = map->ring;
	intf->in_error = -ENOTCONN;
	atomic_inc(&map->read);
	notify_remote_via_irq(map->irq);
}