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); }