lib: fix dealing with udebugd restarts
[project/udebug.git] / ring.c
diff --git a/ring.c b/ring.c
index 7c869f5864077df1b87815c5bf8d49e013622223..81f341f4a4bcda394b92a6641fc078bd60281ffb 100644 (file)
--- a/ring.c
+++ b/ring.c
@@ -22,7 +22,8 @@ static uint32_t gen_ring_id(void)
        if (!urandom && (urandom = fopen("/dev/urandom", "r")) == NULL)
                return 0;
 
-       fread(&val, sizeof(val), 1, urandom);
+       if (fread(&val, sizeof(val), 1, urandom) != 1)
+               return 0;
 
        return val;
 }
@@ -63,6 +64,7 @@ struct client_ring *client_ring_alloc(struct client *cl)
        r->cl = cl;
        r->id = msg->id;
        r->fd = cl->rx_fd;
+       cl->rx_fd = -1;
        r->ring_size = msg->ring_size;
        r->data_size = msg->data_size;
        list_add_tail(&r->list, &cl->bufs);
@@ -81,5 +83,6 @@ void client_ring_free(struct client_ring *r)
        udebug_ubus_ring_notify(r, false);
        avl_delete(&rings, &r->node);
        list_del(&r->list);
+       close(r->fd);
        free(r);
 }