tools/xenstored: Stash the correct request in lu_status->in

When Live-Updating with some load, Xenstored may hit the assert
req->in == lu_status->in in do_lu_start().

This is happening because the request is stashed when Live-Update
begins. This happens in a different request (see call lu_begin()
when select the new binary) from the one performing Live-Update.

To avoid the problem, stash the request in lu_start().

Fixes: 65f19ed62a ("tools/xenstore: Don't assume conn->in points to the LU request")
Reported-by: Michael Kurth <mku@amazon.com>
Signed-off-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: luca.fancellu@arm.com
Reviewed-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
Julien Grall committed 2021-07-06 09:50:57 +01:00
1 parent 33e48312cf
commit 09e2cd6995
1 file changed
+1 -1
+1 -1
View File
@@ -103,7 +103,6 @@ static const char *lu_begin(struct connection *conn)
if (!lu_status)
return "Allocation failure.";
lu_status->conn = conn;
lu_status->in = conn->in;
talloc_set_destructor(lu_status, lu_destroy);
return NULL;
@@ -757,6 +756,7 @@ static const char *lu_start(const void *ctx, struct connection *conn,
lu_status->force = force;
lu_status->timeout = to;
lu_status->started_at = time(NULL);
lu_status->in = conn->in;
errno = delay_request(conn, conn->in, do_lu_start, conn, false);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.