diff mbox

[4/9] ibacm: Relocate client refcnt

Message ID 1395605901-9080-5-git-send-email-sean.hefty@intel.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Hefty, Sean March 23, 2014, 8:18 p.m. UTC
From: Sean Hefty <sean.hefty@intel.com>

Adjust when we take a reference on the client connection.
Increment the client reference when we begin processing
the client's request, and release it when the response
has been sent.

The client reference will no longer be associated with the
lifetime of any underlying acm_request structure.  This change
will allow the acm core to control the client reference
count when we move to a provider plug-in model in subsequent
patches.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
---
 src/acm.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/src/acm.c b/src/acm.c
index c9e1b3c..4fc650b 100644
--- a/src/acm.c
+++ b/src/acm.c
@@ -441,7 +441,6 @@  acm_alloc_req(struct acm_client *client, struct acm_msg *msg)
 		return NULL;
 	}
 
-	(void) atomic_inc(&client->refcnt);
 	req->client = client;
 	memcpy(&req->msg, msg, sizeof(req->msg));
 	acm_log(2, "client %d, req %p\n", client->index, req);
@@ -452,7 +451,6 @@  static void
 acm_free_req(struct acm_request *req)
 {
 	acm_log(2, "%p\n", req);
-	(void) atomic_dec(&req->client->refcnt);
 	free(req);
 }
 
@@ -1084,6 +1082,7 @@  acm_client_resolve_resp(struct acm_client *client, struct acm_msg *req_msg,
 
 release:
 	lock_release(&client->lock);
+	(void) atomic_dec(&client->refcnt);
 	return ret;
 }
 
@@ -1340,6 +1339,7 @@  acm_client_query_resp(struct acm_client *client,
 
 release:
 	lock_release(&client->lock);
+	(void) atomic_dec(&client->refcnt);
 	return ret;
 }
 
@@ -2311,6 +2311,8 @@  put:
 
 static int acm_svr_resolve(struct acm_client *client, struct acm_msg *msg)
 {
+	(void) atomic_inc(&client->refcnt);
+
 	if (msg->resolve_data[0].type == ACM_EP_INFO_PATH) {
 		if (msg->resolve_data[0].flags & ACM_FLAGS_QUERY_SA) {
 			return acm_svr_query_path(client, msg);