mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
33e48312cf
commit
09e2cd6995
1 file changed
+1
-1
@@ -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);
|
||||
|
||||
|
||||