Blob Blame History Raw
From 1bbdf818b7e7fc04741710613ea1adcb0f26bd31 Mon Sep 17 00:00:00 2001
From: Soumya Koduri <skoduri@redhat.com>
Date: Thu, 25 Jun 2015 19:49:59 +0530
Subject: [PATCH 178/190] protocol/server: Include a check to validate xprt->client

rpc_transport entries(xprt) are added to the conf->xprt_list
during client connection with the server. But the client object is created
and assigned to that transport object only during GF_HANDSK_SETVOLUME. Hence
till that period, there could be xprt entries in the xprt_list without client
associated with it. Added a check to validate the client object during upcall
notify.

This is backport of the fix -
http://review.gluster.org/#/c/11411/

Change-Id: I11e2fcd8b0a67e35302ede478b777b72d1973456
BUG: 1235544
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/51718
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Tested-by: Krishnan Parthasarathi <kparthas@redhat.com>
---
 xlators/protocol/server/src/server.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c
index ca00dc0..55b3018 100644
--- a/xlators/protocol/server/src/server.c
+++ b/xlators/protocol/server/src/server.c
@@ -1159,7 +1159,9 @@ server_process_event_upcall (xlator_t *this, void *data)
                 list_for_each_entry (xprt, &conf->xprt_list, list) {
                         client = xprt->xl_private;
 
-                        if (strcmp(client->client_uid, client_uid))
+                        /* 'client' is not atomically added during xprt entry
+                         * addition to the list. */
+                        if (!client || strcmp(client->client_uid, client_uid))
                                 continue;
 
                         rpcsvc_request_submit(conf->rpc, xprt,
-- 
1.7.1