diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index cb3ceb047ba0f7a3a0e1b7a7bf036bc67e29e680..a61efa230c957a475b130d0f5e5d4790dd82364d 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -2000,6 +2000,7 @@ int SMBCALL smb_tzutc(int16_t zone)
 }
 
 /****************************************************************************/
+/* The caller needs to call smb_unlockmsghdr(smb,remsg)						*/
 /****************************************************************************/
 int SMBCALL smb_updatethread(smb_t* smb, smbmsg_t* remsg, ulong newmsgnum)
 {
@@ -2011,16 +2012,15 @@ int SMBCALL smb_updatethread(smb_t* smb, smbmsg_t* remsg, ulong newmsgnum)
 		if((remsg->offset==0 || remsg->idx.offset==0)		/* index not read? */
 			&& (retval=smb_getmsgidx(smb,remsg))!=SMB_SUCCESS)
 			return(retval);
-		if((retval=smb_lockmsghdr(smb,remsg))!=SMB_SUCCESS)
-			return(retval);
-		if(!remsg->hdr.length		/* header not read? */
-			&& (retval=smb_getmsghdr(smb,remsg))!=SMB_SUCCESS)
-			return(retval);
-
+		if(!remsg->hdr.length) {	/* header not read? */
+			if((retval=smb_lockmsghdr(smb,remsg))!=SMB_SUCCESS)
+				return(retval);
+			if((retval=smb_getmsghdr(smb,remsg))!=SMB_SUCCESS)
+				return(retval);
+		}
 		remsg->hdr.thread_first=newmsgnum;
 		remsg->idx.attr = (remsg->hdr.attr |= MSG_REPLIED);
 		retval=smb_putmsg(smb,remsg);
-		smb_unlockmsghdr(smb,remsg);
 		return(retval);
 	}