free IMAP command's payload prior to invoking its completion callback
otherwise the synching may livelock due to failing to schedule follow-up commands, thinking the buffers are still full. of course, this is relevant only for commands that failed early and thus didn't free the payload right after submission already - which will be possible only after the next commit.
This commit is contained in:
parent
1225f0b86b
commit
5e5c7fb508
|
@ -288,11 +288,13 @@ done_imap_cmd( imap_store_t *ctx, imap_cmd_t *cmd, int response )
|
||||||
{
|
{
|
||||||
if (cmd->param.wait_check)
|
if (cmd->param.wait_check)
|
||||||
ctx->num_wait_check--;
|
ctx->num_wait_check--;
|
||||||
cmd->param.done( ctx, cmd, response );
|
|
||||||
if (cmd->param.data) {
|
if (cmd->param.data) {
|
||||||
free( cmd->param.data );
|
free( cmd->param.data );
|
||||||
|
cmd->param.data = NULL;
|
||||||
|
// This needs to happen before calling back.
|
||||||
ctx->buffer_mem -= cmd->param.data_len;
|
ctx->buffer_mem -= cmd->param.data_len;
|
||||||
}
|
}
|
||||||
|
cmd->param.done( ctx, cmd, response );
|
||||||
free( cmd->cmd );
|
free( cmd->cmd );
|
||||||
free( cmd );
|
free( cmd );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user