Segment->Length = sizeof (struct xsd_sockmsg);
}
-static PXENBUS_STORE_RESPONSE
+static VOID
StoreCopyResponse(
- IN PXENBUS_STORE_CONTEXT Context
+ IN PXENBUS_STORE_CONTEXT Context,
+ OUT PXENBUS_STORE_RESPONSE Response
)
{
- PXENBUS_STORE_RESPONSE Response;
PXENBUS_STORE_SEGMENT Segment;
- NTSTATUS status;
-
- Response = __StoreAllocate(sizeof (XENBUS_STORE_RESPONSE));
-
- status = STATUS_NO_MEMORY;
- if (Response == NULL)
- goto fail1;
+ ASSERT(Response != NULL);
*Response = Context->Response;
Segment = &Response->Segment[XENBUS_STORE_RESPONSE_HEADER_SEGMENT];
} else {
ASSERT3P(Segment->Data, ==, NULL);
}
-
- return Response;
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return NULL;
}
static VOID
RemoveEntryList(&Request->ListEntry);
- Request->Response = StoreCopyResponse(Context);
+ StoreCopyResponse(Context, Request->Response);
StoreResetResponse(Context);
Request->State = XENBUS_STORE_REQUEST_COMPLETED;
ULONG Count;
XENBUS_STORE_REQUEST_STATE State;
LARGE_INTEGER Timeout;
+ NTSTATUS status;
ASSERT3U(Request->State, ==, XENBUS_STORE_REQUEST_PREPARED);
+ Request->Response = __StoreAllocate(sizeof (XENBUS_STORE_RESPONSE));
+
+ status = STATUS_NO_MEMORY;
+ if (Request->Response == NULL)
+ goto fail1;
+
// Make sure we don't suspend
ASSERT3U(KeGetCurrentIrql(), <=, DISPATCH_LEVEL);
KeRaiseIrql(DISPATCH_LEVEL, &Irql);
Timeout.QuadPart = TIME_RELATIVE(TIME_S(XENBUS_STORE_POLL_PERIOD));
while (State != XENBUS_STORE_REQUEST_COMPLETED) {
- NTSTATUS status;
-
status = XENBUS_EVTCHN(Wait,
&Context->EvtchnInterface,
Context->Channel,
KeLowerIrql(Irql);
return Response;
+
+fail1:
+ Error("fail1 (%08x)\n", status);
+
+ return NULL;
}
static NTSTATUS