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>