Re: dbmail-3.2.0 double lock?

Paul J Stevens <[email protected]> Sun, 21 Sep 2014 17:01:10 +0200
Newsgroups gmane.mail.imap.dbmail.devel
Message-ID <[email protected]>
You are right. The purpose of that lock is to protect race conditions on
client->client_state.

I'll push fix for this. Please let me know if you agree it fixes this.



On 03-09-14 11:15, Sergej Pupykin wrote:
> 
> At Tue, 02 Sep 2014 21:07:50 +0400,
> Sergej Pupykin <[email protected]> wrote:
>> ci_read_cb() calls client->cb_error() under PLOCK(client->lock).
>>
>> cb_error == client_error_cb, which also calls client->PLOCK(client->lock).
>>
>> Can it hangs here in case of error?
> 
> I've made completely incorrect fix, which works and proofs that this
> is the bug:
> 
> --- dbmail-3.2.0/src/clientbase.c	2014-08-23 17:01:38.000000000 +0400
> +++ dbmail-3.2.0.my/src/clientbase.c	2014-09-02 21:22:01.075125889 +0400
> @@ -413,11 +413,11 @@
>  			break;
> 
>  		} else if (t == 0) {
> -			PLOCK(client->lock);
>  			if (client->sock->ssl) {
>  				if (client->cb_error(client->rx, t, (void *)client))
>  					client->client_state |= CLIENT_ERR;
>  			}
> +			PLOCK(client->lock);
>  			if (client->sock->ssl || client->rx) // EOF on stdin is not an error
>  				client->client_state |= CLIENT_EOF;
>  			PUNLOCK(client->lock);
> _______________________________________________
> Dbmail-dev mailing list
> [email protected]
> http://mailman.fastxs.nl/cgi-bin/mailman/listinfo/dbmail-dev
> 

-- 
________________________________________________________________
Paul J Stevens       pjstevns @ gmail, twitter, github, linkedin
           www.nfg.nl/[email protected]/+31.85.877.99.97