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)
|
||||
ctx->num_wait_check--;
|
||||
cmd->param.done( ctx, cmd, response );
|
||||
if (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;
|
||||
}
|
||||
cmd->param.done( ctx, cmd, response );
|
||||
free( cmd->cmd );
|
||||
free( cmd );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user