Browse Source

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.
wip/maildir-path-under-inbox
Oswald Buddenhagen 3 years ago
parent
commit
5e5c7fb508
  1. 4
      src/drv_imap.c

4
src/drv_imap.c

@ -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…
Cancel
Save