[PATCH 01/12] os: Factor out some common code in input buffer handling
Adam Jackson
ajax at redhat.com
Tue Oct 16 11:56:14 PDT 2012
Signed-off-by: Adam Jackson <ajax at redhat.com>
---
os/io.c | 61 ++++++++++++++++++++++++++-----------------------------------
1 file changed, 26 insertions(+), 35 deletions(-)
diff --git a/os/io.c b/os/io.c
index 2f091c4..34dcfd1 100644
--- a/os/io.c
+++ b/os/io.c
@@ -206,27 +206,17 @@ YieldControlDeath(void)
timesThisConnection = 0;
}
-int
-ReadRequestFromClient(ClientPtr client)
+/* If an input buffer was empty, either free it if it is too big or link it
+ * into our list of free input buffers. This means that different clients can
+ * share the same input buffer (at different times). This was done to save
+ * memory.
+ */
+static void
+NextAvailableInput(OsCommPtr oc)
{
- OsCommPtr oc = (OsCommPtr) client->osPrivate;
- ConnectionInputPtr oci = oc->input;
- int fd = oc->fd;
- unsigned int gotnow, needed;
- int result;
- register xReq *request;
- Bool need_header;
- Bool move_header;
-
- /* If an input buffer was empty, either free it if it is too big
- * or link it into our list of free input buffers. This means that
- * different clients can share the same input buffer (at different
- * times). This was done to save memory.
- */
-
if (AvailableInput) {
if (AvailableInput != oc) {
- register ConnectionInputPtr aci = AvailableInput->input;
+ ConnectionInputPtr aci = AvailableInput->input;
if (aci->size > BUFWATERMARK) {
free(aci->buffer);
@@ -236,10 +226,25 @@ ReadRequestFromClient(ClientPtr client)
aci->next = FreeInputs;
FreeInputs = aci;
}
- AvailableInput->input = (ConnectionInputPtr) NULL;
+ AvailableInput->input = NULL;
}
- AvailableInput = (OsCommPtr) NULL;
+ AvailableInput = NULL;
}
+}
+
+int
+ReadRequestFromClient(ClientPtr client)
+{
+ OsCommPtr oc = (OsCommPtr) client->osPrivate;
+ ConnectionInputPtr oci = oc->input;
+ int fd = oc->fd;
+ unsigned int gotnow, needed;
+ int result;
+ register xReq *request;
+ Bool need_header;
+ Bool move_header;
+
+ NextAvailableInput(oc);
/* make sure we have an input buffer */
@@ -494,22 +499,8 @@ InsertFakeRequest(ClientPtr client, char *data, int count)
int fd = oc->fd;
int gotnow, moveup;
- if (AvailableInput) {
- if (AvailableInput != oc) {
- ConnectionInputPtr aci = AvailableInput->input;
+ NextAvailableInput(oc);
- if (aci->size > BUFWATERMARK) {
- free(aci->buffer);
- free(aci);
- }
- else {
- aci->next = FreeInputs;
- FreeInputs = aci;
- }
- AvailableInput->input = (ConnectionInputPtr) NULL;
- }
- AvailableInput = (OsCommPtr) NULL;
- }
if (!oci) {
if ((oci = FreeInputs))
FreeInputs = oci->next;
--
1.7.12.1
More information about the xorg-devel
mailing list