os: un-duplicate code to close client on write failure
There are three copies of the same short sequence of operations to
close down a client when a write error occurs. Create a new function,
AbortClient, which performs these operations and then call it from the
three places.
Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com>
(cherry picked from commit a82971b070
)
This commit is contained in:
parent
b3de3ebcf4
commit
7a2525fba6
34
os/io.c
34
os/io.c
|
@ -633,6 +633,24 @@ SetCriticalOutputPending(void)
|
|||
CriticalOutputPending = TRUE;
|
||||
}
|
||||
|
||||
/*****************
|
||||
* AbortClient:
|
||||
* When a write error occurs to a client, close
|
||||
* the connection and clean things up.
|
||||
*****************/
|
||||
|
||||
static void
|
||||
AbortClient(ClientPtr client)
|
||||
{
|
||||
OsCommPtr oc = client->osPrivate;
|
||||
|
||||
if (oc->trans_conn) {
|
||||
_XSERVTransDisconnect(oc->trans_conn);
|
||||
_XSERVTransClose(oc->trans_conn);
|
||||
oc->trans_conn = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************
|
||||
* WriteToClient
|
||||
* Copies buf into ClientPtr.buf if it fits (with padding), else
|
||||
|
@ -708,11 +726,7 @@ WriteToClient(ClientPtr who, int count, const void *__buf)
|
|||
FreeOutputs = oco->next;
|
||||
}
|
||||
else if (!(oco = AllocateOutputBuffer())) {
|
||||
if (oc->trans_conn) {
|
||||
_XSERVTransDisconnect(oc->trans_conn);
|
||||
_XSERVTransClose(oc->trans_conn);
|
||||
oc->trans_conn = NULL;
|
||||
}
|
||||
AbortClient(who);
|
||||
MarkClientException(who);
|
||||
return -1;
|
||||
}
|
||||
|
@ -893,9 +907,7 @@ FlushClient(ClientPtr who, OsCommPtr oc, const void *__extraBuf, int extraCount)
|
|||
obuf = realloc(oco->buf, notWritten + BUFSIZE);
|
||||
}
|
||||
if (!obuf) {
|
||||
_XSERVTransDisconnect(oc->trans_conn);
|
||||
_XSERVTransClose(oc->trans_conn);
|
||||
oc->trans_conn = NULL;
|
||||
AbortClient(who);
|
||||
MarkClientException(who);
|
||||
oco->count = 0;
|
||||
return -1;
|
||||
|
@ -922,11 +934,7 @@ FlushClient(ClientPtr who, OsCommPtr oc, const void *__extraBuf, int extraCount)
|
|||
}
|
||||
#endif
|
||||
else {
|
||||
if (oc->trans_conn) {
|
||||
_XSERVTransDisconnect(oc->trans_conn);
|
||||
_XSERVTransClose(oc->trans_conn);
|
||||
oc->trans_conn = NULL;
|
||||
}
|
||||
AbortClient(who);
|
||||
MarkClientException(who);
|
||||
oco->count = 0;
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue
Block a user