Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Feb 2011 11:33:32 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r218217 - head/sbin/hastd
Message-ID:  <201102031133.p13BXW4b043962@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Thu Feb  3 11:33:32 2011
New Revision: 218217
URL: http://svn.freebsd.org/changeset/base/218217

Log:
  Add missing locking after moving keepalive_send() to remote send thread
  in r214692.
  
  MFC after:	1 week

Modified:
  head/sbin/hastd/primary.c

Modified: head/sbin/hastd/primary.c
==============================================================================
--- head/sbin/hastd/primary.c	Thu Feb  3 11:09:27 2011	(r218216)
+++ head/sbin/hastd/primary.c	Thu Feb  3 11:33:32 2011	(r218217)
@@ -1230,8 +1230,12 @@ keepalive_send(struct hast_resource *res
 {
 	struct nv *nv;
 
-	if (!ISCONNECTED(res, ncomp))
+	rw_rlock(&hio_remote_lock[ncomp]);
+
+	if (!ISCONNECTED(res, ncomp)) {
+		rw_unlock(&hio_remote_lock[ncomp]);
 		return;
+	}
 	
 	PJDLOG_ASSERT(res->hr_remotein != NULL);
 	PJDLOG_ASSERT(res->hr_remoteout != NULL);
@@ -1239,20 +1243,22 @@ keepalive_send(struct hast_resource *res
 	nv = nv_alloc();
 	nv_add_uint8(nv, HIO_KEEPALIVE, "cmd");
 	if (nv_error(nv) != 0) {
+		rw_unlock(&hio_remote_lock[ncomp]);
 		nv_free(nv);
 		pjdlog_debug(1,
 		    "keepalive_send: Unable to prepare header to send.");
 		return;
 	}
 	if (hast_proto_send(res, res->hr_remoteout, nv, NULL, 0) < 0) {
+		rw_unlock(&hio_remote_lock[ncomp]);
 		pjdlog_common(LOG_DEBUG, 1, errno,
 		    "keepalive_send: Unable to send request");
 		nv_free(nv);
-		rw_unlock(&hio_remote_lock[ncomp]);
 		remote_close(res, ncomp);
-		rw_rlock(&hio_remote_lock[ncomp]);
 		return;
 	}
+
+	rw_unlock(&hio_remote_lock[ncomp]);
 	nv_free(nv);
 	pjdlog_debug(2, "keepalive_send: Request sent.");
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102031133.p13BXW4b043962>