localsocket: datacount

This commit is contained in:
Matheus
2024-04-20 15:47:58 -03:00
parent c829ebbb1b
commit 5f4513794f
+18 -1
View File
@@ -699,6 +699,22 @@ static int localsock_bind(socket_t *socket, sockaddr_t *addr) {
return error; return error;
} }
static size_t localsocket_datacount(socket_t *socket) {
localsocket_t *localsocket = (localsocket_t *)socket;
size_t nbytes = 0;
MUTEX_ACQUIRE(&socket->mutex, false);
if (localsocket->pair == NULL)
goto cleanup;
MUTEX_ACQUIRE(&localsocket->pair->mutex, false);
nbytes = RINGBUFFER_DATACOUNT(&localsocket->ringbuffer);
MUTEX_RELEASE(&localsocket->pair->mutex);
cleanup:
MUTEX_RELEASE(&socket->mutex);
return nbytes;
}
// only called on vnode remove (vfs_inactive) // only called on vnode remove (vfs_inactive)
void localsock_leavebinding(vnode_t *vnode) { void localsock_leavebinding(vnode_t *vnode) {
binding_t *binding = vnode->socketbinding; binding_t *binding = vnode->socketbinding;
@@ -724,7 +740,8 @@ static socketops_t socketops = {
.send = localsock_send, .send = localsock_send,
.recv = localsock_recv, .recv = localsock_recv,
.destroy = localsock_destroy, .destroy = localsock_destroy,
.poll = localsock_poll .poll = localsock_poll,
.datacount = localsocket_datacount
}; };
socket_t *localsock_createsocket() { socket_t *localsock_createsocket() {